知识卡片

平台/插件风格与层次消息总线风格

普通读书笔记卡

内容

平台/插件风格把目标软件拆成两部分:程序主体(平台)和功能扩展模块(插件)。平台完成软件的核心基础功能,又可细分为内核功能(软件大部分核心功能)和插件处理功能(扩展平台、管理插件,为插件与平台通信提供标准扩展接口)。关键设计是定义两个标准接口:平台扩展接口完全由平台实现、插件只调用使用,实现插件向平台方向的单向通信(插件借此获取主框架资源和数据);插件接口完全由插件实现、平台只调用使用,实现平台向插件方向的单向通信(平台借此调用插件功能)。这种”接口的调用规范与功能实现分离”带来的好处是:不同插件开发者对同一接口的具体实现可以不同,但主程序对这些插件的调用方式完全一样。优点是降低模块间互依赖性(修改一个插件不影响其他插件正常运行)、支持模块独立开发部署维护、支持根据需求动态组装分离系统;缺点是插件的可重用性差(为特定主程序开发的通信模块通常无法用于其他主程序)。Eclipse是典型案例:运行时内核定义插件必须符合的结构、负责查找装入注销插件、维护插件注册表,整体类似一条”软总线”,核心部分提供许多插槽(扩展点),其余部分都是可随时加卸载的插件。基于层次消息总线的架构风格(JB/HMB)是国产青鸟工程提出的相近思路:组件之间不靠直接调用交互,而是都挂接在消息总线上、向总线登记感兴趣的消息类型,组件发消息后由总线负责分派给所有对此消息感兴趣的组件——消息是组件间通信的唯一方式,组件只关心消息本身、不关心发出者和接收者,这降低了耦合、增强了重用性,还支持运行时动态增删组件、动态改变组件响应的消息、消息过滤这三种系统演化能力;复杂组件可分解为通过局部消息总线连接的子组件,整个系统也能作为一个组件、经更高层消息总线集成到更大系统中,形成消息总线的递归嵌套结构。两种风格的共同逻辑是:都靠一层”中介”(插件接口 vs 消息总线)把组件间的直接依赖转换成对中介的单向依赖,从而换取可插拔的灵活性,代价则都是重用要求偏高、可重用性受限。

参考来源

- 位置:《软件架构理论与实践》第4章《软件架构的风格与模式》"4.3.13 平台/插件风格"及"4.3.19 基于层次消息总线的架构风格"节(源文件:_epub-src/OEBPS/text00034.html) - 结论依据:原文分别说明平台扩展接口与插件接口的单向通信设计("平台扩展接口实现插件向平台方向的单向通信……插件接口实现平台向插件方向的单向通信"),以及JB/HMB风格中"组件只对消息本身感兴趣,并不关心消息是如何发生的,以及发出者和接收者情况",直接支撑本卡片对两种风格共同逻辑的归纳。 - 原始内容:平台扩展接口完全由平台实现,插件只是调用和使用,插件接口完全由插件实现,平台也只是调用和使用……JB/HMB风格的组件接口是一种基于消息的互联接口……组件只对消息本身感兴趣,并不关心消息是如何发生的,以及发出者和接收者情况,这降低了组件之间的耦合性。