插件式可扩展架构设计心得
Last Edited Time
Mar 3, 2022 08:24 AM
date
May 20, 2021
slug
plugin-architecture
status
Published
tags
Design Pattern
必读系列
架构
个人笔记
summary
- 覆盖式:只执行最新注册的逻辑,跳过原始逻辑
- 管道式:输入输出相互衔接,一般输入输出是同一个数据类型
- 洋葱圈式:在管道式的基础上,如果系统核心逻辑处于中间,插件同时关注进与出的逻辑,则可以使用洋葱圈模型
type
Post
几大要素
如何注入、配置、初始化插件
插件如何影响系统
插件对系统的影响我们可以总结为三方面:行为、交互、展示。单独一个插件可能只涉及其中一点。根据具体场景,有些方面也不必去影响,比如一个逻辑引擎类型的系统,就大概率不需要展示这块的东西啦。
插件输入输出的含义与可以使用的能力
插件与系统间最重要的契约就是 API 签名,这涉及了可以使用哪些 API,以及这些 API 的输入输出是什么。
Each plugin should only do a small amount of work, so you can connect them like building blocks. You may need to combine a bunch of them to get the desired result.
提供的能力类型主要有下面四种:
- 纯工具:不影响系统状态
- 获取当前系统状态
- 修改当前系统状态
- API 形式注入功能:例如注册 UI,注册事件等
复数个插件之间的关系是怎么样的
覆盖式
只执行最新注册的逻辑,跳过原始逻辑
管道式
输入输出相互衔接,一般输入输出是同一个数据类型。
洋葱圈式
在管道式的基础上,如果系统核心逻辑处于中间,插件同时关注进与出的逻辑,则可以使用洋葱圈模型。
集散式
集散式就是每一个插件都会执行,如果有输出则最终将结果进行合并。这里的前提是存在方案,可以对执行结果进行 merge。