软件架构C4模型介绍

时间:2021-01-01 10:05:00 来源:互联网 作者: 神秘的大神 字体:

软件架构C4模型介绍 “C4 模型”:

代表上下文(Context)、容器(Container)、组件(Component)代码(Code)——一系列分层的图表,可以用这些图表来描述不同缩放级别的软件架构,每种图表都适用于不同的受众。

<font size="4"><img width="1656" height="1080" title="c4-overview" style="border: 0 currentColor; border-image: none; display: inline; background-image: none" alt="c4-overview" src="https://img2020.cnblogs.com/blog/15172/202101/15172-20210101100424772-1614823323.png" border="0" class="img-responsive"></font>

为代码创建地图,首先需要一组通用的抽象来创建一种无处不在的语言,用来描述软件系统的静态结构。C4 模型使用容器(应用程序、数据存储、微服务等)、组件代码来描述一个软件系统的静态结构。它还考虑到使用软件系统的人。

<img width="3072" height="1728" title="abstractions" style="border: 0 currentColor; border-image: none; display: inline; background-image: none" alt="abstractions" src="https://img2020.cnblogs.com/blog/15172/202101/15172-20210101100426109-720443967.png" border="0" class="img-responsive">


示例

第1 层是系统上下文图,它显示了正在构建的软件系统,以及系统与用户及其他软件系统之间的关系。

<img width="907" height="759" title="image" style="margin: 0; border: 0 currentColor; border-image: none; display: inline; background-image: none" alt="image" src="https://img2020.cnblogs.com/blog/15172/202101/15172-20210101100427518-1794541731.png" border="0" class="img-responsive">

第2层是一个容器图,将软件系统放大,显示组成该软件系统的容器(应用程序、数据存储、微服务等)。技术决策也是该图的关键部分。以下是互联网银行系统的容器图示例。它显示了互联网银行系统(虚线框)由五个容器组成:服务器端Web 应用程序、客户端单页面应用程序、移动应用程序、服务器端API 应用程序和数据库。

<img width="1143" height="778" title="image" style="margin: 0; border: 0 currentColor; border-image: none; display: inline; background-image: none" alt="image" src="https://img2020.cnblogs.com/blog/15172/202101/15172-20210101100429126-549344700.png" border="0" class="img-responsive">

第 3 层是组件图,将单个容器放大,以显示其中的组件。这些组件映射到代码库中的真实抽象(例如一组代码)。下面是一个虚拟的网上银行系统的组件图示例,显示了 API 应用程序中的一些组件(而不是全部)。

<img width="1105" height="785" title="image" style="margin: 0; border: 0 currentColor; border-image: none; display: inline; background-image: none" alt="image" src="https://img2020.cnblogs.com/blog/15172/202101/15172-20210101100430828-1595167834.png" border="0" class="img-responsive">

两个Spring MVC REST 控制器为JSON/HTTPS API 提供访问点

第4 层代码
最后,可以放大个别组件,以显示该组件的实现方式。以下是一个虚拟的网上银行系统的UML 类图示例

<img width="989" height="794" title="image" style="border: 0 currentColor; border-image: none; display: inline; background-image: none" alt="image" src="https://img2020.cnblogs.com/blog/15172/202101/15172-20210101100432180-834883690.png" border="0" class="img-responsive">

C4 模型没有预定义任何特定的符号,在这些示例图中看到的是一个个简单的符号,适用于白板、纸张、便签、索引卡片和各种图表工具。也可以使用 UML 作为符号,并适当使用包、组件和原型。

C4 模型是一种在不同抽象层次上交流软件架构的简单方法,可以向不同的受众讲述不同的故事。这也是向软件开发团队介绍(通常是重新引入)严谨和轻量级建模的一种方式。


在JAVA中,有一个工具帮助我们用代码驱动测试架构ArchUnit in Java。

相关也有一本书推荐Coding an Architecture Style.



今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管理,团队建设 有参考作用 , 您可能感兴趣的文章:
<font size="2">领导人怎样带领好团队</font>
<font size="2">构建创业公司突击小团队</font>
<font size="2">国际化环境下系统架构演化</font>
<font size="2">微服务架构设计</font>
<font size="2">视频直播平台的系统架构演化</font>
<font size="2">微服务与Docker介绍</font>
<font size="2">Docker与CI持续集成/CD</font>
<font size="2">互联网电商购物车架构演变案例</font>
<font size="2">互联网业务场景下消息队列架构</font>
<font size="2">互联网高效研发团队管理演进之一</font>
<font size="2">消息系统架构设计演进</font>
<font size="2">互联网电商搜索架构演化之一</font>
<font size="2">企业信息化与软件工程的迷思</font>
<font size="2">企业项目化管理介绍</font>
<font size="2">软件项目成功之要素</font>
<font size="2">人际沟通风格介绍一</font>
<font size="2">精益IT组织与分享式领导</font>
<font size="2">学习型组织与企业</font>
<font size="2">企业创新文化与等级观念</font>
<font size="2">组织目标与个人目标</font>
<font size="2">初创公司人才招聘与管理</font>
<font size="2">人才公司环境与企业文化</font>
<font size="2">企业文化、团队文化与知识共享</font>
<font size="2">高效能的团队建设</font>
<font size="2">项目管理沟通计划</font>
<font size="2">构建高效的研发与自动化运维</font>
<font size="2">某大型电商云平台实践</font>
<font size="2">互联网数据库架构设计思路</font>
<font size="2">IT基础架构规划方案一(网络系统规划)</font>
<font size="2">餐饮行业解决方案之客户分析流程</font>
<font size="2">餐饮行业解决方案之采购战略制定与实施流程</font>
<font size="2">餐饮行业解决方案之业务设计流程</font>
<font size="2">供应链需求调研CheckList</font>
<font size="2">企业应用之性能实时度量系统演变</font>
Openshift与Kubernetes的区别

如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

<img width="240" height="240" title="MegadotnetMicroMsg_thumb1_thumb1_thu[2]" style="border-width: 0; padding-top: 0; padding-right: 0; padding-left: 0; display: inline; background-image: none" alt="MegadotnetMicroMsg_thumb1_thumb1_thu[2]" src="https://images0.cnblogs.com/blog/15172/201503/211054062506158.jpg" border="0" class="img-responsive">

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。