我并不是在寻找特定于语言的答案,只是寻找实现插件系统的通用模型(如果你想知道,我正在使用Python)。我有自己的想法(注册回调,仅此而已),但我知道还有其他想法。通常使用什么,还有什么是合理的?

插件系统是什么意思?依赖注入和 IOC 容器听起来是一个不错的解决方案吗?

我的意思是,呃,好吧,一种将功能插入基本程序而不改变它的方法。我出发时并没有打算定义它。依赖注入不 特别适合我正在做的事情,但我对它们了解不多。

有帮助吗?

解决方案

有一个非常好的 插曲软件工程广播, ,您可能对此感兴趣。

为了方便以后参考,我在这里转载了“促成因素规则" (替代链接)在优秀的 为 Eclipse 做出贡献 作者:埃里希·伽玛、肯特·贝克。

  • 邀请规则——只要有可能,让其他人为你的贡献做出贡献。
  • 延迟加载规则 - 仅在需要时才加载贡献。
  • 安全平台规则 - 作为扩展点的提供者,您必须保护自己免受扩展程序的不当行为的影响。
  • 公平游戏规则 - 所有客户都遵循相同的规则,即使是我。
  • 显式扩展规则 - 显式声明平台可以扩展的位置。
  • 多样性规则 - 分机点接受多个分机。
  • 良好的围栏规则 - 当将控制权传递到代码之外时,请保护自己。
  • 显式 API 规则 - 将 API 与内部分离。
  • 稳定性规则——一旦你邀请某人做出贡献,就不要改变规则。
  • 防御性 API 规则 - 仅公开您有信心的 API,但准备好在客户要求时公开更多 API。

其他提示

一个简单的插件架构可以定义一个插件接口,其中包含插件应该实现的所有方法。该插件处理来自应用程序的事件,并且可以使用应用程序的标准代码、模型对象等。把事情做好。基本上与 ASP.NET 表单相同,只不过您是重写而不是实现。

没有人教我这部分,我也不是专家,但我觉得:一般来说,插件的稳定性不如其应用程序,因此应用程序应始终处于控制之中,并且只给插件定期执行操作的机会。如果插件可以注册观察者,则应该尝试/捕获对委托的调用。

在Python中,您可以使用以下提供的入口点系统 setuptoolspkg_resources. 。每个入口点应该是一个返回有关插件信息的函数——名称、作者、安装和拆卸函数等。

怎么样 抽象工厂?您的基本程序定义了抽象概念如何相互交互,但调用者必须提供实现。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top