持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第8天,点击查看活动详情
有时候我们想设计一个与项目解耦的系统,能在外部更改项目的能力,这个通常需要用一个插件系统实现。 我们用插件系统,可以先看看有哪些部分是可以改的。常用的插件系统,包含以下几个部分:
- chrome的插件系统
- vscode的插件系统
- umi的插件系统
- webpack的插件系统
- vue-cli的插件系统 等等。插件要么是提供新的能力,要不就是为现有能力提供定制。但是我们在设计插件体系的时候,要做到:
- 与现有工程结偶;2.可动态化引入与配置 另外更进一步,还希望插件间自由组合,能实现更多复杂的逻辑。 通常在运行时被引入系统,由系统控制和调度。
那么,怎么实现一个插件系统呢?这个我们需要先定义下想插件帮我们解决什么问题?这个需要你对自己的需求比较了解,并对自己的需求进行解构与抽象。我们需要先把问题弄清,这样才能让开发者有的放矢。我们先定义好框架,开发者才知道该去怎么实现。我们定义问题可以采用穷举法,就是把要实现的内容举例子,看看能否满足。针对已知的问题做抽象。不变的东西稳定下来,变化的东西暴露出去,支持配置,和其它的设计模式都是一个道理。
我们做事情最好有一个指导性的建议,这样才不至于有遗漏的点。插件的设计有个几个重点:
- 如何注入、配置、初始化插件
- 插件对系统有啥影响
- 插件输入输出的能力及可以使用的能力
- 插件间的关系