前面是概念内容,在实现的时候,google 搜的资料进行汇总所做的笔记,看具体事件,从 标题 “插件实践方案” 开始看
随着MVVM的框架和库的流行,想必组件化开发已经成为了前端开发的主流思想,特别是Vue、React、Angular已经有比较成熟的开发模式、社区和UI组件库
『成熟型功能明确产品』和『面向企业或单位的部分功能不明确产品』都有一些共同的特点。
建立内部UI组件库(封装粒度小)
插件本质也是一种软件复用方式,和我们常说的组件区别是复用的维度不同。
比如对Android开发而言,插件化和组件化区别
在现有软件开发中,业务越来越复杂,代码规模越来越大,依赖的人力也越来越多。为了降低系统模块内部耦合度,减少开发难度,也为了能够支持多团队的并行开发,插件式开发架构变得愈加流行,Eclipse, Visual Studio, VSCode等,都是插件式开发架构的典型案例。
现代软件提供插件式开发架构,一方面是服务于产品自身内部开发,另外一方面服务于市场化。借助于市场上各领域开发人员,在某一款软件(开源or商业)上进行面向新领域的开发,可以大大提高该产品的市场占有率,并衍生出一系列各领域的代理商及咨询业务。

现实中,硬件开发其实很多也是插件化思想的

像PC制造,各个功能模块就可以理解为插件。
插件化,最大的优势就是按照功能区分,系统耦合度低,一块功能的添加或删除,并不影响其他功能的使用。
如果所有的功能都打包在一个工程内,简单可靠,但扩展性极为不佳,扩展功能的成本非常之高,但效率和代码量均较小。
如果将各个功能拆分成为各个组件,组件间相互调用,这样可以使得系统的耦合度降低,但添加了诸多的数据传递代码
系统的每一部分,都只是一个插件,所有部分都是平级的,可能GUI用来加载并引导框架启动,但其也必须是一个插件,才能被其他组件调用。组件和组件间的循环依赖是可以的,因为大家都仅仅保护对应插件的接口工程。

借用内核+应用软件开发的思想,首先有一个插件调度的核心,在这个核心的支持下可以开发支持这个核心的应用程序,我把这些应用程序称为『插件』,插件是一个具有完整逻辑的应用程序,它不依赖任何其他的插件,只需要依赖核心即可在系统中独立运行。
我们的软件系统往往是要面向持续性的迭代的,在开发之初很难把所有需要支持的功能都想清楚,有时候还需要借助社区的力量去持续生产新的功能点,或者优化已有的功能。这就需要我们的软件系统具备一定的可扩展性。插件模式就是我们常常选用的方法。
事实上,现存的大量软件系统或工具都是使用插件方式来实现可扩展性的。比如大家最熟悉的小可爱——VSCode,其插件拥有量已经超越了他的前辈 Atom,发布到市场中的数量目前是 24894 个。这些插件帮助我们定制编辑器的外观或行为,增加额外功能,支持更多语法类型,大大提升了开发效率,同时也不断拓展着自身的用户群体。又或者是我们熟知的浏览器 Chrome,其核心竞争力之一也是丰富的插件市场,使其不论是对开发者还是普通使用者都已成为了不可获取的一个工具。另外还有 Webpack、Nginx 等等各种工具,这边就不一一赘述了。
根据目前各个系统的插件设计,总结下来,我们创造插件主要是帮助我们解决以下两种类型的问题:
同时,在解决上面这类问题的时候做到:
并且进一步地可以实现:
这里提到的不管是提供新能力,还是进行能力定制,都既可以针对系统开发者本身,也可以针对三方开发者。
结合上面的特征,我们尝试简单描述一下插件是什么吧。
参考文章:
前端插件化架构的思考 https://cloud.tencent.com/developer/article/1600005
前端插件化架构的探索和实践 https://segmentfault.com/a/1190000024527170
译] React 16.6 懒加载(与预加载)组件 https://juejin.cn/post/6844903753200451592
前端,何不尝试一下『插件化』开发 https://juejin.cn/post/6844904118591422472
插件化?好像也就那么回事 https://juejin.cn/post/7143869920193822733
转载本站文章《插件化架构设计(1):插件化架构能解决什么问题?为啥选它?》, 请注明出处:https://www.zhoulujun.cn/html/webfront/engineer/Architecture/8755.html
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。