C4模型是由Simon Brown提出的软件架构可视化标准,旨在通过4个核心层级,让架构图从“一张混乱的大图”变为“分层次、精准沟通”的工具。
它按受众和细节粒度分为四层(由粗到细):
- L1 系统上下文(最高层):面向非技术人员(如产品、业务方)。展示你的系统(方框)与用户(小人)及其他外部系统(方框)的交互关系。核心关注:系统边界和外部依赖。
- L2 容器层:面向架构师、运维。展示系统内部由哪些可独立部署/运行的进程组成(如:Web应用、移动App、数据库、微服务)。核心关注:技术选型(如Spring Boot vs Node.js)和部署边界。
- L3 组件层:面向开发团队内部。将单个容器解剖,展示内部的逻辑组件(如:Controller、Service、Repository)及其接口调用关系。核心关注:代码模块划分和职责边界。
- L4 代码层(最低层):面向特定模块开发者。使用类图或ER图展示具体代码实现(如某个类的设计)。建议:通常无需绘制,用IDE逆向生成即可。
核心价值(为什么不用UML):
- 标准符号:仅用方框(系统/容器/组件)和箭头(交互)表示,颜色仅用于分组,避免视觉噪音。
- 受众对齐:L1给业务看,L2给运维看,L3给开发看,避免给所有人看同一张图。
必备补充(动态视角):
C4本质是静态结构图。若要展示动态行为(如登录流程),请配合时序图使用;若要展示部署,请补充部署图。
实战建议(“必须做”与“不要做”):
✅必须做:每个框图配上标题(如“L1-支付系统上下文”)和图例;L2/L3务必标注技术栈(如“Java 17”)。
❌不要做:不要在L1图里画数据库(数据库属于内部实现);不要试图把所有层级塞进一张图里。
推荐工具:
- Structurizr(官方DSL,支持代码化绘图,最强推荐)。
- PlantUML / Mermaid(文本绘图,适合集成到Git文档)。
- Draw.io / Gliffy(拖拽式,适合快速草图)。