软件架构设计|C4模型

前言

在做系统架构设计过程中,有很多工具,今天给大家推荐一款比较简洁具备层次化的设计模型,C4模型;希望能为大家系统设计起到一定的帮助

什么是C4模型

C4 模型是来自 software architecture for developers 一书的定义,指的是 Context 上下文场景、Container 容器、Component 组件和 Classes 类(或者 Code 代码),意思指一个软件架构是由这些模型呈树形结构组成。
确实代码并不能讲述系统的整个故事,在缺乏文档的情况下,人们通常会开始在白板上或纸上用图框和线条解释系统的主要构建块是什么,它们是如何连接的。而使用Microsoft Visio, Rational Software Architect 或 Sparx Enterprise Architect等专业工具又比较复杂。

更好的办法是在不同的抽象层次创建不同的图diagram,一个简单的图diagram比复杂的图能够更有效表达描述。
www.4model.com 提供了更多的信息、视频、示例图表和工具链接。如果你的团队正纠结于软件架构沟通方面的问题,那么可以看看这些资料。

4层的划分

C4架构图主要街道一下几个问题:1. 为哪些用户提供什么服务?2. 完成这个系统使用了哪些服务? 3. 每个服务是由哪些组件实现的?4. 实现这个组件需要完成什么?;以上4个问题分别由语境图容器图组件图类图组成。
软件系统图例

上下文图Context diagram

一个系统是一个高层次抽象和代表,一个系统由多个单独的容器组成,比如财务系统,银行系统或网站系统等。
主要意义在于明确我们构建的软件系统是什么,谁在使用它,如何与现有的IT系统融合
它主要从更高的层次展示了正在向自己已有的IT环境中添加了什么,技术和非技术可以当做讨论起点的一种更高层次图标,如下图例
C4语境图/上下文图例

容器图Container diagram

一个容器代表组件执行或驻留的地方,这可能是一个Web容器或应用服务器,也可以是富客户端应用或数据库,容器是做为系统一部分启动的,容器之间通讯是通过远程接口如 SOAP web service, RESTful interface, Java RMI, Microsoft WCF, messaging,等进行, Docker可以认为是一个这样的容器。

主要帮助解决软件系统的整体形态,高层次的技术决策、职责在系统如何分布、容器之间如何相互交流,为实现特性,作为一个开发者应该在哪里写代码。
容器的概念包含但不限于Web服务器、应用服务器、总线、web浏览器等。图例如下:
C4容器图

组件图Component diagram

一个组件可以认为是由一个或多个类组成的逻辑组,比如一个审计audit组件或授权服务能够用于决定资源的访问是否被允许,组件典型地由许多协同类组成微服务架构可以认为是一种组件。
主要用以解答系统由哪些组件组成,高层次上,系统如何工作,是否清晰,所有组件/服务是否在一个容器中;如下图所示
C4组件图

类图 Class

这是面向对象世界常用, 类是我们系统最小的构建模块.如下示例
C4类图模型

C4模型工具箱

为了能够比较好的绘制图例,我这边整理了其图元素工具箱,喜欢的朋友可以直接拷贝使用(访问地址:https://www.processon.com/view/link/5cbed72ae4b01941c8b88864
C4模型图元工具箱


如果你在这方面有不同方面的见解,也欢迎在下方进行留言,一起讨论

想要了解更多信息,可关注本公众号(一起学开源);或请长按以下二维码添加助手。将拉你加入社区进行交流
一起学开源

​​


版权声明:本文为hekuinumberone原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。