返回专题

专题 2021

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

- 覆盖式:只执行最新注册的逻辑,跳过原始逻辑\\n- 管道式:输入输出相互衔接,一般输入输出是同一个数据类型\\n- 洋葱圈式:在管道式的基础上,如果系统核心逻辑处于中间,插件同时关注进与出的逻辑,则可以使用洋葱圈模型

Design Pattern必读系列架构个人笔记
本文目录10
  1. 几大要素
  2. 如何注入、配置、初始化插件
  3. 插件如何影响系统
  4. 插件输入输出的含义与可以使用的能力
  5. 复数个插件之间的关系是怎么样的
  6. 覆盖式
  7. 管道式
  8. 洋葱圈式
  9. 集散式
  10. Reference

几大要素

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

Untitled-c810481e.png

插件如何影响系统

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

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

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

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

覆盖式

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

Untitled-8f6c0978.png

管道式

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

Untitled-894241e1.png

洋葱圈式

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

Untitled-d8e3dbb6.png

集散式

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

Untitled-35223783.png

Reference

https://mp.weixin.qq.com/s/YKbGQVyTd9pLZFLfnmdKwQ

返回首页
上一篇访问者(Visitor)下一篇Flutter

Discussion

留言与讨论

想法、补充和不同意见都欢迎。