Architecture 基于插件的体系结构的优点和缺点是什么?

Architecture 基于插件的体系结构的优点和缺点是什么?,architecture,Architecture,我想做一个软件的架构设计,可以用来在一个平台下集成各种第三方软件(可执行文件) 默认情况下,标准项目类型将添加到平台中。项目类型定义了不同软件的执行方式及其输入和输出文件 用户可以自定义可用的标准项目类型,并将其作为定义新自定义执行流的新项目类型添加到平台 它还应该支持功能的简单扩展和定制。我了解到基于插件的体系结构支持这两种功能 基于插件的体系结构的优点和缺点是什么?我们有没有更好的架构可以用于这种场景 提前感谢:)插件体系结构的优点显然是增加了灵活性。这允许其他开发人员以一开始没有想到的方式

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

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

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

它还应该支持功能的简单扩展和定制。我了解到基于插件的体系结构支持这两种功能

基于插件的体系结构的优点和缺点是什么?我们有没有更好的架构可以用于这种场景


提前感谢:)

插件体系结构的优点显然是增加了灵活性。这允许其他开发人员以一开始没有想到的方式扩展您的应用程序。注意,有各种各样的插件体系结构,从灵活到极端灵活。最灵活的一种称为完全插入式体系结构,用于

缺点是,要想真正灵活,您必须开发一个坚实的框架,将加载、卸载和插件之间的通信结合起来。插件之间的通信也会有轻微的性能开销


关于如何创建插件体系结构的讨论,请看下面的问题

可插拔系统的好处是

  • 可扩展性:应用程序可以动态扩展以包括新功能
  • 并行开发:因为特性可以作为单独的组件实现,所以可以由不同的团队并行开发
  • 明确的开发方向:由于插件框架理想地为插件编写者提供了定义良好的界面和文档,因此开发人员有一个明确的开发路线图
  • 简单性:一个插件通常只有一个功能,因此开发人员只有一个关注点
但其中一些优势也是劣势:

  • 可扩展性:插件接口是否预测插件编写者扩展应用程序的方式,或者它是否限制扩展。设计可扩展性以满足所有用例通常需要多次迭代,或者非常好的需求分析
  • 可维护性:插件框架的提供者不仅要确保插件接口满足缩进的用例、清晰且有良好的文档记录,还要确保插件接口能够不断发展。管理版本和与现有插件的向后兼容性可能非常困难。这已经够难了,以至于许多实际的实现都不需要麻烦了,并且让插件编写者有责任用每个版本更新他们的插件
  • 复杂性:虽然每个插件在单独测试时都能工作,但插件之间的交互可能会导致新的问题,只有特定的插件组合才会出现bug
  • 测试:如果插件系统不提供某种形式的模拟插件运行程序进行测试,那么测试插件可能会很困难,这有时是不可能的,并且测试只能通过运行插件来实现,这会减慢开发速度
  • 人工分离:一个插件通常有一个焦点,但是组成一个焦点的是由插件api提供程序设置的。如果一个插件作者发现他需要一个能够合理地同时完成两件事情(由插件api定义)的插件,他可能最终不得不实现两个插件,并找到api目前没有提供的在它们之间提供通信的方法。然后,他不得不绕过或反对插件框架
设计一个好的插件环境与设计一个好的库有许多相同的挑战。如果您自己同时生产环境和插件,那么这并不坏,因为随着环境的发展,您可以更新所有插件,但是如果插件api对所有人开放,那么就需要仔细规划和执行,以正确地设计,避免随着环境的发展,过多的插件重写

弗雷德·布鲁克斯(Fred Brooks)所描述的“第二个系统通常过于通用,旨在实现终极灵活性,有时会产生一个“平台内的平台”/”。当需求不存在或未得到明确规定时,可插拔设计通常被视为一种出路。作为补偿,该软件尽可能灵活地处理“出现的任何事情”


如果这描绘了一幅沉闷的画面,那么,可插拔系统可能会很棒,并提供很多优势,但它们的价格很高。在进入一个可插拔的系统之前,谨慎的做法是为所有需要涵盖所需功能的插件制定需求。然后,这将帮助您确定可插拔设计是否值得,或者一些更简单的方法是否同样适用。

尽管维护基于插件的体系结构并不容易,但为什么人们会以这种方式开发呢?因为它比其他“固定”方法更好。假设您的需求一个接一个地发生变化,并且设计需要固定,那么思考一下其他方法会做什么

它最好的地方是并行开发。当客户端需要一些特性时,开发人员可以并行工作,并将其代码作为插件/组件插入。基本上,即插即用体系结构提供了灵活性和复杂性,但复杂性是第一次。一旦您的团队对它感到满意,他们就可以轻松地处理代码、bug等

如您所述,当您想要集成不同的第三方应用程序时,最好将其开发为基于插件或组件/服务的应用程序。 (我不想让你感到困惑,但是SOA可能会引起你的兴趣。)