C4 模型概览
C4 模型是一种精简的图形化标记法,用于对软件系统的架构进行建模。它由 Simon Brown 创建,提供了一种在不同抽象层次上沟通软件架构的方式。
为什么选择 C4?
传统架构图通常存在以下问题:
- 标记不一致:不同团队使用不同的符号
- 细节层次不当:要么过于抽象,要么过于详细
- 文档过时:图表不能反映实际情况
C4 模型通过以下方式解决这些问题:
- 标准化的抽象层次:从高到低有四个清晰的层次
- 简单的标记法:技术人员和非技术人员都能轻松理解
- 层次化导航:放大查看更多细节,缩小获取上下文
四个层次
第 1 层:系统上下文
系统上下文图将您的系统显示为中心的一个方框,周围是用户和与之交互的其他系统。
目的:展示全局视图 — 您的系统如何融入整个环境
受众:所有人(技术和非技术人员)
包含:
- 您的软件系统(居中)
- 使用系统的用户/角色
- 系统依赖的外部系统
第 2 层:容器
容器图深入到您的系统内部,展示高层次的技术构建模块。
目的:展示主要的技术选择和职责分配
受众:开发团队内外的技术人员
包含:
- 容器(应用程序、数据存储等)
- 容器之间的关系
- 与外部系统的连接
第 3 层:组件
组件图深入到容器内部,展示其内部组件。
目的:展示容器由哪些组件组成及其职责
受众:软件架构师和开发人员
包含:
- 容器内的组件
- 组件之间的关系
- 技术/实现选择
第 4 层:代码
代码图(可选)展示组件的实现方式。
目的:展示复杂或关键组件的代码级细节
受众:开发人员
包含:
- 类、接口、函数
- 继承和实现关系
- 设计模式
Archyl 中的 C4
Archyl 通过以下功能实现 C4 模型:
导航
- 双击任意元素可深入到下一层次
- 使用面包屑导航返回上层
- 键盘快捷键快速导航(← → ↑ ↓)
元素类型
每个层次都有自己的元素类型:
| 层次 | 元素类型 |
|---|---|
| 系统上下文 | 系统、外部系统、人员 |
| 容器 | 容器、外部容器 |
| 组件 | 组件 |
| 代码 | 类、接口、函数 |
关系
可以在任何层次的元素之间创建关系:
- 从一个元素拖动到另一个元素
- 添加描述交互的标签
- 指定使用的技术
样式
自定义图表的外观:
- 不同元素类型的颜色
- 自定义图标
- 使用叠加层分组
最佳实践
从顶层开始
始终从系统上下文图开始。它迫使您思考:
- 谁使用您的系统?
- 您依赖哪些外部系统?
- 您系统的范围是什么?
保持简洁
每张图应能在一个页面/屏幕上显示。如果不能:
- 拆分为多张图
- 减少细节层次
- 使用下一层级展示更多细节
使用一致的命名
- 使用清晰、描述性的名称
- 遵循团队的命名规范
- 避免使用不被普遍理解的缩写
记录关系
关系与元素同样重要:
- 始终添加描述交互的标签
- 在相关时包含技术/协议
- 显示通信方向