知识卡片
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["更低层组件"]