我想知道如何在C++/Qt中设计一个好的插件架构。当涉及到核心组件时,我主要关注的是依赖注入与全局注入。插件应该可以访问几个核心功能,如注册套接字监听器、修改托盘菜单、访问主窗口、启动/重新启动应用程序、访问扩展池等等。
我现在想知道的是,类PluginLoader是否应该保存所有这些东西,并将它们插入一个方法initialize(…………)中,其中包含一个巨大的参数列表,或者全局值在这种情况下是否“正常”,因为这些核心组件本质上都是单元素。
发布于 2021-12-16 10:02:44
您提供给插件的任何东西都会成为应用程序的公共API的一部分,如果不付出很大的代价,就不可能更改。考虑到这一点,您应该尽量保持您的公共API尽可能小,这样您就不会在对核心功能进行更改时限制自己。
从这个角度来看,如果有任何方法可以避免的话,就不应该在公共API中公开(名称)全局变量。
另一方面,一个巨大的initialize方法将所有可能的依赖注入到所有插件中,无论插件是否需要它们,也是不可取的,也不是未来的证据。
对于真正的单例插件依赖项,可以使用Singleton设计模式。它几乎与全局变量相同,但它清楚地表达了这样的意图:必须只有一个实例(不管会考虑什么需求更改)。
对于不是单例的插件依赖项,我将向插件提供一个“依赖解析器”类/实例,从而使它们能够请求所需的依赖项。
https://softwareengineering.stackexchange.com/questions/435363
复制相似问题