概述
最近在开发系统中,发现需要一种方式来构建对于当前系统的理解和细化,UML是我一下子映入脑海的方式,但是很久不再接触了,刚好在前段时间看到关于C4model相关文章,刚好可以试试
架构图的主要功能是从各个角度和各个层次去描述系统的功能,主要是从宏观到微观的描述。C4 Model也是提供图形从不同的层次去描述我们的系统。主要的优势是C4 Model提供很少的抽象图形要素和图类型来描述系统,使得各个系统参与者都能很快理解系统的功能。这些图从层级上来看都是缩放的,就行谷歌地图一样
地图
为了构建实际系统的抽象。C4 Model对于系统的描述提供了四个抽象层次:
抽象
这个抽象层次里面包含5个要素
-
Software System:软件系统最高的抽象层次,描述了交付给用户完成用户所需功能的系统。
-
Person:使用系统的人或者角色
-
Container:容器是独立运行一些代码和数据,组合起来完成系统功能的要素。一个容器可以是Server-side web application、Client-side web application、Client-side desktop application、Mobile app、Server-side console application、Microservice、Database、Blob or content store、File system、Shell script等。
-
Component:组件一组相关功能的封装,对外提供良好的接口。
基于这四个层次的抽象,C4 Model由4张核心图和3张附加图组成
四张核心图
4张核心图分别为系统上下文图(Context)、容器图(Container)、组件图(Component)、代码图(Code),代码图是实际的类实现,可选。
系统上下文图
系统上下文图
系统上下文图主要表述的是当前要开发的系统和周边环境的关系,包括系统和用户之间的关系和系统和周边系统的关系,在系统上下文图里,方块指代的是软件系统,蓝色表示我们关注的系统(位于中心),灰色表示我们直接依赖的系统或者依赖我们的系统,虚线框一般用于用于聚合相关元素。
容器图
容器图
当我们理解了当前关注的系统在整个IT环境中的地位的时候,需要将当前系统放大,观察里面的内部结构,放大后就会看到容器,如上图所示,C4模型认为系统是由容器组成的。容器图显示的是软件架构中各个独立的部分(一般是一个独立的进程),每个容器的职责和他们间是如何交互的,以及容器与其他系统是如何交互的。它显示了当前软件系统的技术选型和交互方式。它是一个简单的、以高级技术为重点的图表,对软件开发人员和支持/操作人员都很有用
组件图
组件图
继续放大容器,可以看到每个容器里有哪些组件组成,组件的职责是什么,组件是如何交互的。组件主要是相关功能的聚合,提供对外的接口
代码图
代码图
代码图跟UML里面的类图很类似。除非非常重要的且还没有写出代码的组件才画代码图。
核心图主要固定了我们系统的抽象层次,方便讨论和理解。
三张扩展图
核心图让我理解了系统静态架构,三张扩展图,可以让我们关注更多的维度。
系统景观图
image.png
系统景观图是比系统上下文图更丰富的系统级别的表达。不像上下文图只关注聚焦系统和它的直接关系,连一些间接相关的系统都会标示出来,包括那些外部系统相关的用户。系统景观图的意义在于从企业的整个IT架构来看待当前要构建的系统的功能和价值。
动态图