软件架构设计|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

一个容器可以认为是由一个或多个类组成的逻辑组,比如一个审计组件或授权服务能够用于决定资源的访问是否被允许,组件典型地由许多协同类组成微服务架构可以认为是一种组件。
主要用以解答此容器由哪些组件组成(按现在开发架构来看更多是微服务类同于容器),高层次上,系统通过观测各个容器/微服务之间的协作判断系统是如何工作,通过组件图知道某个容器/微服务内部结构以及内部是如何工作;组件在业界定义的颗粒度大小不一,可以结合自身业务进行程序设计,抽离不同的组件,理清各个组件之间的依赖关系,如下图所示
在这里插入图片描述

类图 Class

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

C4模型工具箱

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


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

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

​​

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起学开源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值