C4模型是一种分层架构可视化框架,由Simon Brown提出,用于清晰描述软件系统的静态结构。它通过四级抽象层逐步展开细节,有效平衡全面性与可读性,已成为现代软件架构文档的核心工具。以下是其核心分层及实践指南:
✨ 禁止出现技术细节,仅展示业务级交互
示例:[电商平台] -- 下单 --> [支付网关] [用户] --> [电商平台]
标注技术选型,明确责任边界
示例:[Web前端 (React)] -- REST API --> [订单服务 (Spring Boot)] [订单服务] -- JDBC --> [订单数据库 (PostgreSQL)]
� 聚焦单一容器,避免跨容器绘制
示例(订单服务内部):[订单控制器] --> [库存检查组件] [库存检查组件] --> [支付网关客户端]
仅为核心逻辑绘图(如支付状态机),避免全量类图
示例:class Payment { +String id +Status status +void authorize() } enum Status { PENDING, SUCCESS, FAILED }
优势 | 说明 |
---|---|
层次化抽象 | 从业务全景到代码细节渐进展开,避免信息过载 |
多角色覆盖 | 管理层→上下文图,架构师→容器图,开发者→组件/类图 |
技术中立 | 适用于单体/微服务/事件驱动等任意架构 |
无缝嵌入文档 | 与架构文档深度集成(如Context图写入概述文档,组件图链接至ADRs) |
Workspace workspace = new Workspace("电商系统", "C4模型示例");
SystemContextView contextView = workspace.getViews().createSystemContextView(...);
contextView.addAllSoftwareSystems(); // 自动生成上下文图
@startuml
!include C4_Context.puml
Person(user, "顾客")
System(ecommerce, "电商平台")
Rel(user, ecommerce, "浏览/下单")
@enduml
案例:某金融系统重构时:
- 用上下文图向客户解释新老系统切割范围
- 用容器图指导运维设计K8s集群拓扑
- 用组件图为开发团队划分微服务模块
- 关键支付流程用类图确保状态机一致性
通过C4模型的分层表达,可构建连贯、精准、易维护的架构知识图谱,彻底解决“架构图即兴绘制导致的认知偏差”问题。