2008-09-19 34 views
5

我并没有为特定于语言的答案寻找太多的东西,只是实现插件系统的一般模型(如果你想知道,我正在使用Python)。我有自己的想法(注册回调,这就是它),但我知道其他人存在。通常使用什么,还有什么是合理的?实现插件系统有哪些不同的方式?

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

我的意思是,嗯,这是一种将功能插入基本程序而不改变它的方法。我出发时无意定义它。依赖注入不看起来特别适合我在做什么,但我不太了解他们。

+0

我想看看关于如何处理插件间通信的一些讨论。有人使用公共事件吗?主题空间? – 2008-09-19 08:03:13

回答

1

还有就是Software Engineering Radio,你可能有兴趣在一个非常好的episode

以供将来参考,我在这里再现了由Erich Gamma,肯特·贝克的优秀Contributing to Eclipse给“Rules for Enablers”(alternative link) 。

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

在Python中,你可以使用setuptoolspkg_resources提供的入口点系统。每个入口点应是返回有关插件的信息的功能 - 名称,作者,安装和拆卸功能等

2

一个简单的插件架构可以定义所有的方法插件接口插件应该执行。该插件处理来自应用程序的事件,并可以使用应用程序的标准代码,模型对象等来完成任务。基本上和ASP.NET窗体一样,只是你重写而不是实现。

没有人教我这个部分,我不是专家,但我觉得:一般而言,插件会比它的应用程序不太稳定,因此应用程序应该始终在控制和只给行动的插件周期性机会。如果一个插件可以注册一个观察者,那么应该尝试/捕获对该代表的调用。

0

如何abstract factory?您的基本程序定义了抽象概念如何相互作用,但调用者必须提供实现。

相关问题