软件架构-C4模型

C4 模型是一种易于学习、对开发人员友好的软件架构图绘制方法。它能帮助软件开发团队在前期设计和回顾性记录现有代码库期间描述和交流软件体系结构。

如上图所示C4模型划分了四个级别的视图分别是:系统上下文图、容器图、组件图和代码。

  • 系统上下文:System Context,所表达的是系统和用户以及它所依赖系统之间的关系
  • 容器:Container,系统是由容器组成的,这个容器是一个抽象的概念,代指有自己独立进程空间的一种存在,如果系统设计的好也可以1:1对应Docker
  • 组件:Component,容器是由组件组成的,组件在这里把接口和它的实现类打包成一个概念,组件是映射到代码库中的真实抽象
  • 代码:Code,代码图就是UML里的类图之类很细节的图。一般是不画的,都是代码生成出来。除非非常重要的且还没有写出代码的组件才画代码图。

系统上下文图

系统上下文图展示了系统环境的总体情况,它清晰的展示了软件系统的人员(如用户、参与者等)和外部依赖项,明确了软件系统的边界。

范围:单个软件系统。
主要元素:范围内的软件系统。
支持元素:直接连接到范围内的软件系统的人员(例如用户、参与者、角色或角色)和软件系统(外部依赖项)。通常,这些其他软件系统位于您自己的软件系统的范围或边界之外,您不对它们负责或拥有它们。
目标受众:软件开发团队内外的每个人,包括技术人员和非技术人员。

容器图

在容器图中容器只是一个抽象的概念,它可能对应到系统中的Web应用程序、单页应用程序、桌面应用程序、移动应用程序、数据库架构、文件系统等。

容器图显示了软件体系结构的高级形状以及职责如何分布在其上。它还显示了主要技术选择以及容器间的通信方式。这是一个简单、高级的以技术为中心的图表,可用于 软件开发人员和支持/运营人员都一样。

范围:单个软件系统。
主要元素:范围内的软件系统内的容器。
支持元素:直接连接到容器的人员和软件系统。
目标受众:软件开发团队内外的技术人员;包括软件架构师、开发人员和运营/支持人员。

组件图

组件图显示了容器由哪些“组件”构成的,每个组件中的每一个组件是,它们的职责和技术/实施细节

范围:单个软件系统。
主要元素:范围内容器内的组件。
支持元素:容器(在范围内的软件系统内)以及直接连接到组件的人员和软件系统。
目标受众:软件架构师和开发人员。

代码

代码视图展示了每个组件的代码实现方式,类似UML类图、实体关图。通常这是一个可选的视图,我们并不一定要每个组件展示详细的代码实现方式

范围:单个组件。
主要元素:作用域中组件中的代码元素(例如类、接口、对象、函数、数据库表等)。
目标受众:软件架构师和开发人员。

工具推荐

  1. PlantUML
  2. Enterprise Architect
  3. Gaphor