基于插件的架构有哪些优缺点?

时间:2010-05-12 11:43:08

标签: architecture

我想为可以在一个平台下集成各种第三方软件(可执行文件)的软件进行架构设计。

默认情况下,标准项目类型将添加到平台。项目类型定义了执行不同软件的方式及其输入和输出文件。

用户可以自定义可用的标准项目类型,并将其作为定义新自定义执行流程的新项目类型添加到平台。

此外,它还应支持轻松扩展和自定义功能。我读到基于插件的架构支持两者。

基于插件的架构有哪些优缺点?我们有更好的架构可以用于这种场景吗?

提前致谢:)

4 个答案:

答案 0 :(得分:45)

可插拔系统的好处是

  • 可扩展性:可以动态扩展应用程序以包含新功能。
  • 并行开发:由于功能可以作为单独的组件实现,因此可以由不同的团队并行开发。
  • 明确的发展方向:由于插件框架理想地为插件编写者提供了明确定义的界面和文档,因此开发人员有明确的开发路线图。
  • 简单:插件通常只有一个功能,因此开发人员只需一个焦点

但其中一些优势也是弱点:

  • 可扩展性:插件接口是否预测插件编写器扩展应用程序的方式,或者是否限制扩展。设计可扩展性以满足所有用例通常需要多次迭代,或者非常好的需求分析。
  • 可维护性:插件框架的提供者不仅要确保插件接口满足缩进的用例,清晰且记录良好,而且还可以进化。管理版本和向后兼容现有插件可能非常困难。足够困难,许多实际的实现都不会打扰,并推动插件编写者有责任更新每个版本的插件。
  • 复杂性:尽管每个插件在单独测试时都能正常工作,但插件之间的交互可能会导致新问题,只有某些插件组合出现错误。
  • 测试:如果插件系统不提供某种形式的模拟插件运行器进行测试,测试插件可能会很困难,这有时是不可能的,并且测试只能通过运行真实的插件来实现,这会减慢开发速度。 / LI>
  • 人工分离:插件通常只有一个焦点,但插件api提供程序设置了单个焦点的构成。如果一个插件编写者发现他需要一个插件可以合理地做两件事(由插件api定义)紧密串联,他可能最终必须实现两个插件,并找到提供它们之间的通信的方法,目前不提供api。然后他不得不解决或反对插件框架。

设计一个好的插件环境与设计一个好的库有许多相同的挑战。如果您自己同时生成环境和插件,那么它就不会那么糟糕,因为您可以随着环境的发展更新所有插件,但如果插件api对所有人开放,则需要仔细规划和执行才能获得设计随着环境的发展,有权避免过多的插件重写。

Fred Brooks所描述的“Second-system syndrome”提倡所开发的第二个系统通常过于通用,旨在获得最大的灵活性,有时会产生“平台内的平台”/“inner platform effect”。当需求不存在或未指定时,可插拔设计通常被视为一种出路。为了补偿,软件尽可能灵活,以尝试处理“随之而来的”。

如果它描绘了沉闷的画面,那么可插拔的系统可以很棒并提供很多优势,但它们的价格却很高。在深入了解可插拔系统之前,谨慎地制定满足所需功能所需的所有插件的要求。这将帮助您确定可插拔设计是否值得付出努力,或者一些更简单的方法同样适用。

答案 1 :(得分:5)

插件架构的优势显然是灵活性的提高。这允许其他开发人员以首先没有预料到的方式扩展您的应用程序。请注意,有各种插件架构,从灵活到极端灵活。最灵活的一种称为完全插件架构,在eclipse中使用。

缺点是要真正灵活,你必须开发一个结合插件之间的加载,卸载和通信的可靠框架。插件之间的通信也会有轻微的性能开销。

有关如何创建插件架构的讨论,请查看this问题。

答案 2 :(得分:3)

虽然它不容易维护基于插件的架构,但为什么人们会以这种方式发展呢?因为它仍然比其他“固定”方法更好。如果您的要求一个接一个地改变并且设计需要修复,那么想想如何处理其他方法?

关于它的最好的事情是并行开发。当客户端尽快想要某些功能时,开发人员可以并行工作并将其代码作为插件/组件插入。基本上,即插即用架构提供了复杂性的灵活性,但复杂性是第一次。一旦您的团队熟悉它,它们就很容易处理代码,错误等......

如果您想要集成不同的第三方应用程序,如您所述,最好将其开发为基于插件或组件/服务。 (我不想让你感到困惑,但 SOA 可能会引起人们的兴趣。)这样你可以在不需要时打开/关闭服务/插件。即使您想要执行 SAAS (软件即服务)模型,您也可以从中获益,您可以获得每种不同服务/功能的收入:)。

作为参考,您可以查看以下JAVA框架。有许多ESB可用,它们提供基于组件/服务的即插即用架构。

我希望这会有所帮助。

感谢。

答案 3 :(得分:1)

您可以在link text

找到优势和小插件框架