【iSAQB软件架构】C4模型

C4模型是一种分层架构可视化框架,由Simon Brown提出,用于清晰描述软件系统的静态结构。它通过四级抽象层逐步展开细节,有效平衡全面性可读性,已成为现代软件架构文档的核心工具。以下是其核心分层及实践指南:


C4模型四层结构详解

1. 系统上下文图(System Context)
  • 目标:界定系统边界,明确外部依赖
  • 元素
    • ✅ 核心系统(1个)
    • ✅ 用户角色(如Customer, Admin)
    • ✅ 外部系统(支付网关、身份认证服务)
  • 绘图关键

    禁止出现技术细节,仅展示业务级交互
    示例

    [电商平台] -- 下单 --> [支付网关]
    [用户] --> [电商平台]
    
2. 容器图(Containers)
  • 目标:描述技术单元及通信方式
  • 容器定义
    • Web应用、移动App、数据库、消息队列、微服务等
  • 元素关系
    • ✅ 容器间协议(HTTP/gRPC/DB连接)
    • ✅ 技术栈标注(如Spring Boot/PostgreSQL/Kafka)
  • 绘图关键

    标注技术选型,明确责任边界
    示例

    [Web前端 (React)] -- REST API --> [订单服务 (Spring Boot)]
    [订单服务] -- JDBC --> [订单数据库 (PostgreSQL)]
    
3. 组件图(Components)
  • 目标:拆解容器内部模块逻辑
  • 组件定义
    • 业务模块(如OrderProcessor、PaymentValidator)
    • 可独立编译/部署的代码单元
  • 元素关系
    • ✅ 组件间接口调用(方法级)
    • ✅ 核心数据流方向
  • 绘图关键

    聚焦单一容器,避免跨容器绘制
    示例(订单服务内部):

    [订单控制器] --> [库存检查组件]
    [库存检查组件] --> [支付网关客户端]
    
4. 类图(Code)
  • 目标:实现级设计(可选层)
  • 使用场景
    • 关键算法实现
    • 复杂领域模型
  • 绘图关键

    仅为核心逻辑绘图(如支付状态机),避免全量类图
    示例

    class Payment {
      +String id
      +Status status
      +void authorize()
    }
    enum Status { PENDING, SUCCESS, FAILED }
    

C4模型核心优势

优势 说明
层次化抽象 从业务全景到代码细节渐进展开,避免信息过载
多角色覆盖 管理层→上下文图,架构师→容器图,开发者→组件/类图
技术中立 适用于单体/微服务/事件驱动等任意架构
无缝嵌入文档 与架构文档深度集成(如Context图写入概述文档,组件图链接至ADRs)

C4建模工具推荐

  1. 绘图工具
    • Structurizr(C4官方工具,代码即文档)
      Workspace workspace = new Workspace("电商系统", "C4模型示例");
      SystemContextView contextView = workspace.getViews().createSystemContextView(...);
      contextView.addAllSoftwareSystems(); // 自动生成上下文图
      
    • PlantUML(轻量文本绘图):
      @startuml
      !include C4_Context.puml
      Person(user, "顾客")
      System(ecommerce, "电商平台")
      Rel(user, ecommerce, "浏览/下单")
      @enduml
      
  2. 文档集成
    • 上下文图 → 架构概述文档
    • 容器图 → 部署手册
    • 组件图 → 服务设计文档

C4模型实施原则

  1. 自上而下展开
    • 从Context层开始设计,禁止跨层绘图(如直接在上下文图画数据库)
  2. 按需深入细节
    • 80%场景仅需Context+Containers层
  3. 版本绑定
    • 每个发布版本保留对应的C4图快照
  4. 动态演进
    • 架构变更时同步更新关联层级

案例:某金融系统重构时:

  • 上下文图向客户解释新老系统切割范围
  • 容器图指导运维设计K8s集群拓扑
  • 组件图为开发团队划分微服务模块
  • 关键支付流程用类图确保状态机一致性

通过C4模型的分层表达,可构建连贯、精准、易维护的架构知识图谱,彻底解决“架构图即兴绘制导致的认知偏差”问题。

你可能感兴趣的:(【iSAQB软件架构】C4模型)