知识卡片

C2风格

结构图卡

内容

C2结构由加州大学欧文分校的Richard N. Taylor等人于1995年提出,是一种基于组件和消息的架构风格,适用于GUI软件开发、构建灵活可扩展的应用系统(其主要思想来源于Chiron-1用户界面系统,因此又名Chiron-2,简称C2)。C2架构可概括为”通过连接件绑定在一起的、按一组规则运作的并行组件网络”,系统组织规则是:组件和连接件都有一个顶部和一个底部;组件的顶部只能连到某连接件的底部,组件的底部只能连到某连接件的顶部,组件与组件之间不允许直接连接;一个连接件可以与任意数目的其他组件和连接件相连;两个连接件直接相连时,必须由其中一个的底部连到另一个的顶部。这套规则强制所有组件间交互都通过异步消息机制实现——组件顶端定义能响应哪些通知、能发出哪些请求,底端定义能向下发送哪些通知、能响应下层哪些请求;每个组件只能感知层次高于自己的组件提供的服务,感知不到层次低于自己的组件,请求消息只能向上传送、通知消息只能向下传送。这种”上请求、下通知”的单向传递规则,正是C2用来降低组件间耦合的核心机制:下层组件的状态改变靠向下发通知驱动上层响应,而不是上层直接查询下层状态。优点包括:可用任何编程语言开发组件、组件重用替换容易;组件相对独立、依赖小,扩展能力强、能支持不同粒度组件;组件无须共享地址空间;可支持多用户多系统交互;可动态更新系统框架结构。缺点是不太适合大规模流式风格系统以及数据库使用频繁的应用。典型应用是KLAX游戏架构:最顶层游戏逻辑组件封装游戏状态并在状态改变时发通知,Artist组件捕获通知后改变自身图形对象描述,LayoutManager接收Artist的通知并弥补坐标误差,最底层Graphics Binding组件把这些通知转换为对Windows系统的实际调用。

结构图

flowchart TD
    C1["组件顶部<br/>响应通知/发出请求"] -->|请求消息只能向上| Conn1[连接件]
    Conn1 --> C2["更高层组件"]
    C2 -->|通知消息只能向下| Conn2[连接件]
    Conn2 --> C1
    C1 -.底部.-> Conn3[连接件]
    Conn3 --> C0["更低层组件"]

参考来源

- 位置:《软件架构理论与实践》第4章《软件架构的风格与模式》"4.3.10 C2风格"节(源文件:_epub-src/OEBPS/text00034.html) - 结论依据:原文明确给出C2的四条系统组织规则("系统中的组件和连接件都有一个顶部和一个底部……组件与组件之间的直接连接是不允许的")以及"请求消息只能向上层传送,而通知消息只能向下层传送"这一约束,直接支撑本卡片的结构图与规则解释。 - 原始内容:C2架构风格可以概括为:通过连接件绑定在一起的按照一组规则运作的并行组件网络……每个组件只能感知层次高于自己的组件提供的服务,而不能感知层次低于自己的组件的服务。即请求消息只能向上层传送,而通知消息只能向下层传送。