聊聊插件化系统设计
定义
插件化架构,指的是软件的内核相对较小,主要功能和业务逻辑都通过插件实现。这种架构一般由2个成分组成:
- 内核:通常只包含系统运行的最小功能
- 插件:通常是独立的模块,提供单一的功能
内核除了管理插件之外,还会将要完成的所有业务进行抽象,抽象出最小粒度的基础接口,供插件方来调用。比方说,浏览器就是一个典型的插件化架构,浏览器是内核,页面是插件,这样通过不同的URL地址加载不同的页面,来提供非常丰富的功能。我们开发网页的时候,浏览器会提供很多API和能力,这些接口通过 window来挂载, 比如,DOM、BOM、Event、Location等等。
插件三要素
设计一个完善的插件化架构的系统,包含三要素:
- plugCore:插件运行时,管理插件的加载、运行、卸载等生命周期(类比浏览器);
- pluginAPI:插件运行时提供给插件开发需要用到的接口(类比浏览器例子,相当于window api);
- plugin:插件,相互独立的模块,提供了单一的功能(类比浏览器例子,相当于不同的网页)。
怎么把系统拆解为插件三要素?
第一步:定义出你需要插件化来帮助你解决的问题是什么?
第二步:实现内核
- 开发基础服务
- 开发基础组件
- 开发插件调度机制
参考
[1] 插件式开发架构综述 - 墨天轮
[2] 插件式可扩展架构设计心得
[3] 最经典的两种软件架构模式
[4] 一文搞懂插件架构设计原则
[6] 前端架构利器-依赖注入
[10] 前端插件化架构的探索和实践