目录
理论知识
概述
C4-MODEL:主要设计理念类似于地图,C4关键要素包括:关系——带箭头的线、元素——方块和角色、关系描述——线上的文字、元素的描述——方块和角色里的文字、元素的标记——方块和角色的颜色、虚线框。
C4核心图:
- 系统: System Context,所表达的是系统和用户以及它所依赖系统之间的关系
- 容器:Container,系统是由容器组成的,这个容器是一个抽象的概念,代指有自己独立进程空间的一种存在,如果系统设计的好也可以1:1对应Docker
- 组件:Component,容器是由组件组成的,组件在这里把接口和它的实现类打包成一个概念,组件是映射到代码库中的真实抽象
- 代码:Code,代码图就是UML里的类图之类很细节的图。一般是不画的,都是代码生成出来。除非非常重要的且还没有写出代码的组件才画代码图。
C4扩展图
- 系统景观图:上下文图只关注聚焦系统和它的直接关系。系统景观图是比上下文图更丰富的系统级别的表达,它把间接相关的系统都会标示出来,那些系统的用户以及用户之间的关系也会标示出来,只是内部的用户会用灰色标记。
- 动态图:不同于其他表达静态关系的图,它是用来表达动态关系的,也就是不同的元素之间是如何调用来完成一个业务的。所以动态图不仅仅适用于一个层面上,它在系统级、容器级和组件级都可以画,表达的目标是不一样的。
- 部署图:关注DevOps,实线框不同于虚线框,它表达的是数据中心
在实践中,系统景观是对系统图的补充,动态图是对组件图的补充。
核心图组成详细
View type | Scope | Permitted elements |
1. System Context | A software system. | Software systems People |
2. Container | A software system | Software systems People Containers within the software system in scope |
3. Component | A container | Software systems People Other containers within the parent software system of the container in scope Components within the container in scope |
4. Code | A component | Code elements (e.g. classes, interfaces, etc) that are used to implement the component in scope |
C4元素
元素的图形属性
元素详细
Element type | Parent | Properties |
Person | None | Name* Description Location (Internal or External) |
Software System | None | Name* Description Location (Internal or External) The set of containers that make up the software system |
Container | A software system | Name* Description Technology The set of components within the container |
Component | A container | Name* Description Technology The set of code elements (e.g. classes, interfaces, etc) that the component is implemented by |
Code Element | A component | Name* Description Fully qualified type |
Relationship** | Description Technology |
C4模型示例
系统图Context--谁在使用哪些系统
图中的颜色表示哪些软件系统已经存在(灰色)以及待构建的系统(蓝色)
容器图Containers
系统的容器(应用程序、数据存储、微服务等),技术决策也是该图的关键部分。下例显示了互联网银行系统(虚线框)由五个容器组成:服务器端 Web 应用程序、客户端单页面应用程序、移动应用程序、服务器端 API 应用程序和数据库
组件图Components
下图显示了上图 API Application这个系统模块 应用程序中的一些组件(而不是全部)
代码图
可以用多个UML表示
系统景观图
灰色表示已开发完成的系统