在软件开发领域,清晰地传达架构设计至关重要。C4模型(Context、Containers、Components、and Code)正是一种为开发架构人员量身打造的系统架构图解方法。它提供了一种简单、清晰且易于理解的方式来表达系统的不同层次架构信息,从而帮助开发人员、架构师和利益相关者更好地理解和交流架构决策。
C4模型由Simon Brown在其著作《Software Architecture for Developers》中首次提出,旨在通过一系列图表来展示软件系统的架构。这些图表按照系统的不同层次进行划分,包括系统上下文图、容器图、组件图和代码图。C4模型没有规定使用特定的图形或建模语言,因此使用者可以非常灵活地产出架构图。
系统上下文图位于C4模型的顶层,是软件系统架构图的起点。它展示了系统的全貌,包括系统边界、系统相关的用户、其他支撑系统以及与本系统的交互。这种图非常适合非技术利益相关者,因为它简单明了,不涉及技术细节。
主要元素:待描述的软件系统、用户、外部依赖系统等。
目标受众:软件开发团队内外的所有人,包括技术人员和非技术人员。

容器图是对系统上下文图的放大和补充,展示了系统的物理结构。每个容器代表一个可单独运行/可部署的单元,如Web服务器、应用程序服务器、数据库服务器等。容器图还显示了系统的主要技术选型以及容器间的通信和交互。
主要元素:软件系统范围内的容器,如Spring Boot打包后的应用、MySQL数据库、Redis等。
目标受众:软件开发团队内外的技术人员,包括软件架构师、开发人员和运营/支持人员。

组件图深入到容器内部,展示了容器包含的组件以及组件之间的关系。组件通常代表系统的主要业务功能,如用户界面、业务逻辑、数据处理等。这种图对于开发人员和架构师来说非常重要,因为它提供了对系统内部结构的详细视图。
主要元素:容器内的组件,如Dubbo接口、REST接口、Service等。
目标受众:软件架构师和开发人员。

C4容器组件图
代码图展示了组件内部的类和它们的交互,是最详细的层次。这种图通常用于展示单个组件的实现细节,包括类、它们的属性、方法和关系。然而,在注重敏捷开发的今天,一般不建议产出代码图,除非是非常重要且尚未写出代码的组件。
主要元素:组件内的代码元素,如类、接口、对象、函数、数据库表等。
目标受众:软件架构师和开发人员。

此外,C4模型还包括系统景观图、动态图和部署图等扩展视图,用于描述软件系统在不同层次和场景下的组合和协作方式。
绘制C4图表的工具有很多,常见的工具有draw.io,Plantuml,ProcessOn等,使用者可以按照需求挑选合适的图表工具。对于初学者,推荐使用ProcessOn,这是一款专业的流程图工具,支持在线绘制C4图表,提供了丰富的蜘蛛图模板。
1. 登录ProcessOn后,点击“新建文件”按钮。在弹出的选项中选择“流程图”。
2. ProcessOn提供了多种模板,可以在新建文件时选择适合的C4图表模板作为起点,这可以节省大量设置和布局的时间。
如果选择从空白开始,可以跳过此步骤。
3. 点击左侧图形库下方“更多图形”,选择要创建的C4图表种类,点击“确定”。

4. 从左侧图形库中选择合适的元素拖放到画布上,调整大小和位置,选择图形,点击“+”可以创建连线连接到其他图形。选中图形或连线,顶部工具栏可以设置图形或连线的颜色、边框、字体等属性。

5. 可以使用ProcessOn提供的分享协作功能,将C4图分享给团队成员或利益相关者查看或编辑。也可以将C4图导出为图片或PDF等格式,以便在其他场合使用。
以下是一个互联网银行系统的C4模型:

以下是一个某软件系统数据生产发布模块的C4模型:

以上模板均来自ProcessOn模板社区,可以参考架构设计的思路或克隆使用。
C4模型是一种强大的工具,可以帮助开发架构人员以一致和清晰的方式理解和交流软件架构。通过在项目中使用C4图,可以提高沟通效率,降低误解的风险,并确保架构决策得到适当的记录和理解。无论是资深架构师还是新手开发人员,C4图都是架构工具箱中不可或缺的一部分。