Answers:
有点取决于您的平台,但请记住一些常规事项
版本控制 如果更新应用程序会发生什么,所有旧插件会过时吗(firefox问题)
隔离 插件可以做什么吗?你一直信任他们吗?还是您需要在某种沙箱中运行它们并请求权限。
更新 您如何处理插件更新?
安全性 如何确保插件的作者,防止欺骗或欺骗用户安装恶意代码。通常通过某种代码签名来解决
序列化 通常,当您使用某种隔离时,需要在不同线程或进程之间序列化信息。您如何最有效地做到这一点?
可扩展性 您需要扩展哪些方面?如何在不使API变得笨拙的情况下最大程度地发挥插件的潜力。
如果您要针对第三方开发人员使用插件,那么(根据我的经验)我想说的最重要的一点是,将插件api和类与应用程序的其余部分完全区分开,并使其易于开发尽可能。从主应用程序进行架构到将其“渗入”插件非常容易,因此插件作者必须学习的知识远远超过了他们所需要的。让他们感到轻松,考虑一下您作为插件作者想要什么样的界面和体验。
另一个不错的心态不是像“插件将完成所有这些事情(以代码形式)而是以“插件需要提供此信息”那样思考。”这样,应用程序可以使用必要的信息并进行实际处理,从而简化插件。
同样,通常,只要您能采用描述性方法(元数据,例如xml)而不是代码,就具有很大的优势,因为元数据更易于传输,版本化,部署,安全并且可以更轻松地由第三方配置
我写了此代码项目文章,内容涉及在.NET中使用MEF进行扩展。这是一个很好的介绍。
.NET还有其他可扩展性框架,例如SharpDevelop的加载项体系结构,Mono.Addins和System.AddIn。
对于Java,有Eclipse插件体系结构。
一般模式是这样的:
实际上,它与依赖注入和策略模式有很多共同点。