1.前言
本文将给大家介绍一种简洁明了软件架构可视化模型——C4模型,并手把手教大家如何使用代码绘制出精美的C4架构图。
阅读本文之后,读者画的架构图将会是这样的:
注:该图例仅作绘图示例使用,不确保其完整性、可行性。
2.C4模型
2.1C4模型整体介绍
C4是软件架构可视化的一种方案。架构可视化,指的是用图例的方式,把软件架构设计准确、清晰、美观地表示出来。架构可视化不是指导开发者如何进行架构设计,而是指导开发者将架构设计表达出来,产出简洁直观的架构图。
架构可视化的方法有很多,主流的有“4+1”视图模型、C4模型。视图模型描述的是架构本身,架构确定之后,不管用什么模型去表达,本质上都应该是一样的,并没有优劣之分。
C4模型是一种易于学习、对开发人员友好的软件架构图示方法,C4模型没有规定使用特定的图形、特定的建模语言来画图,因而使用者可以非常灵活地产出架构图。
C4模型将系统从上往下分为SystmContxt,Containrs,Componnts,Cod四层视图,每一层都是对上一层的完善和展开,层层递进地对系统进行描述,如下图。
2.2SystmContxtdiagram
SystmContxt(系统上下文)视图位于顶层,是软件系统架构图的起点,表达的是系统的全貌。SystmContxt视图重点展示的是系统边界、系统相关的用户、其他支撑系统以及与本系统的交互。本层不涉及到具体细节(例如技术选型、协议、部署方案和其他低级细节),因此SystmContxt可以很好地向非技术人员介绍系统。
作用:清晰地展示待构建的系统、用户以及现有的IT基础设施。范围:待描述的核心系统以及其相关用户、支撑系统,不应该出现与核心系统无关的其他系统。例如我们要描述一个打车系统,不应该把无关联的药店系统绘制进去,并且要确保一个SystmContxt只有一个待描述的软件系统。主要元素:Contxt内待描述的软件系统。支持元素:在范围内直接与主要元素中的软件系统有关联的人员(例如用户、参与者、角色或角色)和外部依赖系统。通常,这些外部依赖系统位于我们自己的软件系统边界之外。目标受众:软件开发团队内外的所有人,包括技术人员和非技术人员。推荐给大多数团队:是的。
示例:
这是该网上银行系统的系统上下文图。它显示了使用它的人,以及与该系统有关系的其他软件系统。网上银行系统是将要建设的系统,银行的个人客户使用网上银行系统查看其银行账户的信息并进行支付。网上银行系统本身使用银行现有的大型机银行系统来执行此操作,并使用银行现有的电子邮件系统向客户发送电子邮件。
图例:
2.3Containrdiagram
Containr(容器)视图是对SystmContxt的放大,是对SystmContxt细节的补充。
注意这里的容器,指的不是Dockr等容器中间件。Containr的描述范围是一个可单独运行/可部署的单元。Containr一般指的是应用以及依赖的中间件,例如服务器端Wb应用程序、单页应用程序、桌面应用程序、移动应用程序、数据库架构、文件系统、Rdis、ElasticSach、MQ等。
Containr显示了软件架构的高级形状以及系统内各容器之间的职责分工。
在Containr这一层,还显示了系统的主要的技术选型以及容器间的通信和交互。
作用:展示系统整体的开发边界,体现高层次的技术选型,暴露系统内容器之间的分工交互。范围:单个软件系统,