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