概述

当向别人介绍自己的系统时,随着受众的不同,我们应该站在不同的抽象层次去介绍。比如,当面向非技术人员或团队外开发人员时,应该着重介绍系统的运行环境以及系统提供的功能;当面向团队内开发人员时,应该着重介绍技术选型、功能划分及它们之间的关系;当面向负责某个功能的开发人员时,应该着重介绍组件划分,各个组件的组织方式。

由国际知名架构师Simon Brown编写的《软件架构》中介绍的C4模型具有表达性强、制作简洁等优势,下面将详细介绍这个模型并用示例加以说明。

C4模型将软件系统分成四个层次:


语境图

语境图是一种可以展示给非技术人员的架构图。需要关注于使用者与系统之间的关系,而不是技术细节和实现原理。

范围:整个软件系统

关键元素:范围内的软件系统

辅助元素:范围内的用户和系统之间的关系

受众:每个人

示例1,文件服务:

n-service-context.jpg


容器图

容器图主要展示技术的选择和容器之间的交互。它是一种简单的高层次组织结构,对开发人员很有用。

范围:单独的系统

主要元素:系统内的各个容器

辅助元素:相关的用户和系统与容器之间的联系

受众:技术人员

注意:该图不需要介绍部署环境、集群、复制和故障转移等

示例1,文件上传:

n-service-container-upstream.jpg

示例2,文件下载:

n-service-container-downstream.jpg


组件图

组件图用于展示容器内各个组件的组织方式。

范围:单独的容器

主要元素:容器内的各个组件

辅助元素:相关的用户和系统与组件之间的联系

受众:开发人员

示例1,文件系统的HTTP服务:

http-service-component.jpg


类图

类是组件的实现代码。应该关注于暴漏哪些属性和接口来表示组件的功能。通常可以使用UML模型工具自动生成。

关于UML类关系图可以参考:https://jingyan.baidu.com/article/ad310e80f7d5c01848f49e6b.html