插件式可扩展架构设计心得

Last Edited Time
Mar 3, 2022 08:24 AM
date
May 20, 2021
slug
plugin-architecture
status
Published
tags
Design Pattern
必读系列
架构
个人笔记
summary
- 覆盖式:只执行最新注册的逻辑,跳过原始逻辑 - 管道式:输入输出相互衔接,一般输入输出是同一个数据类型 - 洋葱圈式:在管道式的基础上,如果系统核心逻辑处于中间,插件同时关注进与出的逻辑,则可以使用洋葱圈模型
type
Post

几大要素

如何注入、配置、初始化插件

notion image

插件如何影响系统

插件对系统的影响我们可以总结为三方面:行为、交互、展示。单独一个插件可能只涉及其中一点。根据具体场景,有些方面也不必去影响,比如一个逻辑引擎类型的系统,就大概率不需要展示这块的东西啦。

插件输入输出的含义与可以使用的能力

插件与系统间最重要的契约就是 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,注册事件等

复数个插件之间的关系是怎么样的

覆盖式

只执行最新注册的逻辑,跳过原始逻辑
notion image

管道式

输入输出相互衔接,一般输入输出是同一个数据类型。
notion image

洋葱圈式

在管道式的基础上,如果系统核心逻辑处于中间,插件同时关注进与出的逻辑,则可以使用洋葱圈模型。
notion image

集散式

集散式就是每一个插件都会执行,如果有输出则最终将结果进行合并。这里的前提是存在方案,可以对执行结果进行 merge。
notion image

Reference