软件架构C4模型介绍    

软件架构C4模型介绍 “C4 模型”:

代表上下文(Context)、容器(Container)、组件(Component)和代码(Code)——一系列分层的图表,可以用这些图表来描述不同缩放级别的软件架构,每种图表都适用于不同的受众。

软件架构C4模型介绍_软件架构

为代码创建地图,首先需要一组通用的抽象来创建一种无处不在的语言,用来描述软件系统的静态结构。C4 模型使用容器(应用程序、数据存储、微服务等)、组件和代码来描述一个软件系统的静态结构。它还考虑到使用软件系统的人。

软件架构C4模型介绍_软件架构_02


示例

第1 层是系统上下文图,它显示了正在构建的软件系统,以及系统与用户及其他软件系统之间的关系。

软件架构C4模型介绍_软件架构_03

第2层是一个容器图,将软件系统放大,显示组成该软件系统的容器(应用程序、数据存储、微服务等)。技术决策也是该图的关键部分。以下是互联网银行系统的容器图示例。它显示了互联网银行系统(虚线框)由五个容器组成:服务器端Web 应用程序、客户端单页面应用程序、移动应用程序、服务器端API 应用程序和数据库。

软件架构C4模型介绍_软件架构_04

第 3 层是组件图,将单个容器放大,以显示其中的组件。这些组件映射到代码库中的真实抽象(例如一组代码)。下面是一个虚拟的网上银行系统的组件图示例,显示了 API 应用程序中的一些组件(而不是全部)。

软件架构C4模型介绍_软件架构_05

两个Spring MVC REST 控制器为JSON/HTTPS API 提供访问点

第4 层代码
最后,可以放大个别组件,以显示该组件的实现方式。以下是一个虚拟的网上银行系统的UML 类图示例

软件架构C4模型介绍_软件架构_06

C4 模型没有预定义任何特定的符号,在这些示例图中看到的是一个个简单的符号,适用于白板、纸张、便签、索引卡片和各种图表工具。也可以使用 UML 作为符号,并适当使用包、组件和原型。

C4 模型是一种在不同抽象层次上交流软件架构的简单方法,可以向不同的受众讲述不同的故事。这也是向软件开发团队介绍(通常是重新引入)严谨和轻量级建模的一种方式。


在JAVA中,有一个工具帮助我们用代码驱动测试架构ArchUnit in Java。