C4模型

用于软件架构的 C4 模型

    • 关键要点
    • 第 1 层:系统上下文
    • 第 2 层:容器
    • 第 3 层:组件
    • 第 4 层:代码
    • 符号

关键要点

  • 由于向敏捷转型,软件架构图的使用规模已经大幅缩减。即使有在使用软件架构图,它们往往也混淆不清。
  • C4 模型由一系列分层的软件架构图组成,这些架构图用于描述上下文、容器、组件和代码。C4 图的层次结构提供了不同的抽象级别,每种抽象级别都与不同的受众有关。
  • 为了避免出现含糊不清的情况,可以在图中包含足够数量的文本和关键的图例。

软件架构图是一种非常好的表达方式,可以用它们来表达你将如何构建一个软件系统(预先设计)或者现有的软件系统是如何工作的(回顾文档、知识分享和学习)。

然而,你所看到的大多数软件架构图很可能只是由混乱的框和线组成。敏捷软件开发宣言的一个副作用就是让很多团队停止或缩减了他们的图表和文档工作,包括使用 UML。

现在,这些团队倾向于依靠他们在白板上绘制的临时图表,或者使用通用的图表工具(如微软的 Visio)。Ionut Balosin 在去年写了一篇叫作“软件架构图的艺术”的文章,他在文章中描述了一些常见问题,这些问题与不可理解的符号和不明确的语义有关。

C4模型

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

C4模型

银行的个人客户使用互联网银行系统查看有关银行账户的信息并进行支付。互联网银行系统使用银行现有的大型机银行系统来执行此操作,并使用银行现有的电子邮件系统向客户发送电子邮件。图中的颜色表示哪些软件系统已经存在(灰色)以及待构建的系统(蓝色)。

第 2 层:容器

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

C4模型

两个 Spring MVC REST 控制器为 JSON/HTTPS API 提供访问点,每个控制器随后使用其他组件访问数据库和大型机银行系统中的数据。

第 4 层:代码

最后,如果你确实想要,或者说有这个必要,可以放大个别组件,以显示该组件的实现方式。以下是一个虚拟的网上银行系统的 UML 类图示例(部分),显示了组成 MainframeBankingSystemFacade 组件的代码元素(接口和类)。

C4模型

最后,不要忘记了标题,它应该出现在每个图表上,以明确地描述每个图表的类型和范围(例如,“网上银行系统的系统上下文图表”)。

更多信息

C4 模型是一种在不同抽象层次上交流软件架构的简单方法,可以向不同的受众讲述不同的故事。这也是向软件开发团队介绍(通常是重新引入)严谨和轻量级建模的一种方式。有关 C4 模型的更多信息,以及补充图(运行时和部署)的示例、符号清单、常见问题解答、会议讲座视频和工具选项,请参阅c4model.com。

关于作者

Simon Brown 是一位专门从事软件架构的独立顾问,也是“Software Architecture for Developers”(面向开发人员的软件架构、技术领导力和敏捷性平衡的指南)的作者。他还是 C4 软件架构模型的创建者,这是一种创建代码映射的简单方法。Simon 在国际软件开发会议上经常发表演讲,并在世界各地旅行,以帮助组织可视化和记录他们的软件架构。

查看英文原文:The C4 Model for Software Architecture


本文转载自:https://www.infoq.cn/article/C4-architecture-model

来源:默默草

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年1月12日
下一篇 2019年1月12日

相关推荐