【问题标题】:General Design Requirements to make an application "pluggable"使应用程序“可插入”的一般设计要求
【发布时间】:2014-10-23 18:55:07
【问题描述】:
我想知道是否存在与编程语言无关的范式、模型、模式等来设计作者打算允许第三方开发人员编写插件的应用程序。
例如,如果您想创建某种类型的文本编辑器,您只想专注于主要组件,然后让其他人添加一个可加载的插件,该插件可以进行拼写检查、语法、字数统计、阅读水平等。 ..在原作者创建的基本编辑器中,他们需要做哪些类型的事情来管理入口点、钩子等。
是否有任何技术或方法来管理这一点,或者这真的取决于平台、语言等(例如,用于 Web 应用程序与桌面 GUI 应用程序中的插件的相同概念?- C++ 与 Python)
【问题讨论】:
标签:
design-patterns
plugins
【解决方案1】:
这是一个多层次且非常笼统的问题。关于基本的 OO 设计概念,依赖反转(加上相关的控制反转和依赖注入)SOLID 原则可能会对您有所帮助。来自 GRASP 的低耦合、间接和多态性也将提供一些指导。
每个特定的企业采用的平台几乎总是提供用于创建可插拔架构的具体机制。
最著名的可能是 Java 的 OSGi,它已被移植到其他几个平台。
在 .NET 世界中,您可能会研究 MEF/MAF 框架或 System.AddIn 命名空间中的类型。
此外,您可能会研究任何 DI 容器的使用,它比遵循 OO 设计原则更抽象,比使用 OSGi 或 MEF/MAF 更通用。 Microsoft 的 Unity 就是一个例子。
此外,根据系统的大小,您可能需要考虑事件驱动的集成,该集成通常提供清晰简洁的合同和非常松散的耦合。 RabbitMQ 教程提供了基本模式,但实际上您最终可能会使用更低级(ZMQ)或高级(BizTalk、Tibco 等)的东西。