软件架构的C4模型
封面图
•
2025-11-21
•
架构设计
228
1
1
0
C4 模型是一种用于描述软件架构的**四层模型**,由 **Simon Brown** 提出。它旨在帮助开发人员、架构师和利益相关者更清晰地理解和沟通软件系统的设计。C4 模型的名称来源于四个层级(Context, Containers, Components, Code),每一层都提供了不同粒度的抽象。 --- ## 🧩 C4 模型的四个层次 ### 1. **Context Layer(上下文层)** - **目的**:展示系统的整体范围和外部依赖。 - **内容**: - 系统的用户(用户角色) - 系统与其他系统之间的交互 - 外部服务或系统的集成 - **图示**:使用 **用例图** 或 **泳道图(Swimlane Diagram)** 来表示。 - **例子**:一个电商平台可能有“顾客”、“管理员”、“支付网关”、“物流系统”等。 > ⚠️ 这一层是面向非技术人员(如业务人员、产品经理)的。 --- ### 2. **Containers Layer(容器层)** - **目的**:展示系统的主要组成单元(容器),以及它们之间的关系。 - **内容**: - 容器(Container):可以是 Web 应用、微服务、数据库、API 网关、移动端应用等。 - 容器之间的通信方式(如 HTTP、消息队列、RPC 等) - **图示**:使用 **容器图(Container Diagram)**。 - **例子**:一个电商系统可能包括: - 前端 Web 应用(React) - 后端 API 服务(Node.js) - 数据库(PostgreSQL) - 第三方支付接口(Stripe) > 📌 这一层适合架构师与开发团队之间进行交流。 --- ### 3. **Components Layer(组件层)** - **目的**:详细展示每个容器内部的结构,即组件(Component)。 - **内容**: - 组件(Component):一个逻辑上的模块,比如“订单处理模块”、“用户认证模块”等。 - 组件之间的依赖关系 - 技术实现(如 Java 类、Python 模块等) - **图示**:使用 **组件图(Component Diagram)**。 - **例子**:在“订单处理模块”中可能包含: - 订单创建组件 - 支付验证组件 - 通知组件 > ✅ 这一层是开发人员最常使用的,有助于理解代码结构。 --- ### 4. **Code Layer(代码层)** - **目的**:展示具体的代码结构(类、方法、函数等)。 - **内容**: - 类、方法、函数 - 依赖关系(如类之间的调用) - **图示**:使用 **类图(Class Diagram)** 或 **代码结构图**。 - **例子**:在“订单创建组件”中可能包含: - `OrderService` 类 - `validateOrder()` 方法 - `createOrder()` 方法 > 🔍 这一层是开发人员在编码时参考的,通常不用于架构文档。 --- ## 🧭 C4 模型的优势 | 优势 | 描述 | |------|------| | **分层清晰** | 从宏观到微观逐步展开,便于理解和沟通 | | **适合不同受众** | 上下文层适合业务人员,代码层适合开发人员 | | **易于维护** | 每一层都可以独立更新,不影响其他层 | | **支持多种工具** | 可以使用 PlantUML、Mermaid、Draw.io 等工具绘制 | --- ## 🧰 工具推荐 | 工具 | 类型 | 说明 | |------|------|------| | [PlantUML](https://plantuml.com/) | 文本生成图表 | 支持 C4 模型的语法 | | [Mermaid](https://mermaid-js.github.io/mermaid/#/) | 浏览器渲染 | 适用于 Markdown 中的图表 | | [Draw.io / Diagrams.net](https://www.diagrams.net/) | 图形化工具 | 可手动生成 C4 图 | | [C4 Model Tooling](https://c4model.com/) | 官方资源 | 包含模板和教程 | --- ## 📝 示例(简化的 C4 模型) ### Context Layer: ``` [Customer] -> [Web App] [Web App] -> [Payment Gateway] [Web App] -> [Inventory System] ``` ### Containers Layer: ``` +-------------------+ | Web Application | | (React + Node.js) | +-------------------+ | v +-------------------+ | Payment Service | | (Stripe API) | +-------------------+ | v +-------------------+ | Inventory DB | | (PostgreSQL) | +-------------------+ ``` ### Components Layer: ``` [Web App] ├── User Authentication Component ├── Order Processing Component │ ├── Order Validation │ └── Order Creation └── Product Catalog Component ``` --- 如果你需要我帮你画一个 C4 模型的图或者写一个 C4 模型的文档模板,也可以告诉我!
上一篇:
Service Mesh架构
下一篇:
何时需要画架构图?
标题录入,一次不能超过6条
留言
评论