icon-cookie
The website uses cookies to optimize your user experience. Using this website grants us the permission to collect certain information essential to the provision of our services to you, but you may change the cookie settings within your browser any time you wish. Learn more
I agree
blank_error__heading
blank_error__body
Text direction?

软件架构模型之『C4模型-灵动肆意』

中国科学与技术大学 软件工程硕士

C4模型的核心思想是什么?

The C4 model is an "abstraction-first" approach to diagramming software architecture, based upon abstractions that reflect how software architects and developers think about and build software. The small set of abstractions and diagram types makes the C4 model easy to learn and use.
C4模型是一种“抽象优先”( abstraction-first)的软件体系结构图方法,它基于怎样能反映软件架构师和开发人员如何思考和构建软件的抽象较少的抽象和图表类型使C4模型易于学习和使用(C4模型没有规定使用特定的图形来画图)。

在C4模型怎么样进行抽象?

在C4模型中软件系统被抽象为四个部分:(人)Person、(软件系统)Software System、(容器)Container 和 (组件)Component。

  • 人(Person)

这一抽象的提前是软件系统中“人”的部分与”物“分离,例如角色,或者外部子系统等。

  • 软件系统(Software System)

软件系统是最高级别的抽象,它描述了一些可以为用户带来价值的东西,无论他们是不是“人”。这包括您正在建模的软件系统,以及该软件系统所依赖的其他软件系统。

  • 容器(Container)

容器代表托管代码或数据的事物。为了使整个软件系统正常工作,必须运行一个容器。实际上,容器类似于服务器端的应用程序、一个手机APP,又或者是一个数据库。

  • 组件(Component)

“组件”一词在软件开发行业中是一个非常重载的术语,但是在这种情况下,组件只是封装在定义良好的接口后面的一组相关功能。如果您使用的是Java或C#之类的语言,则想到组件的最简单方法是它是接口后面的实现类的集合。这些组件的打包方式(例如,每个JAR文件,DLL,共享库中的一个组件与许多组件)的打包方式是一个单独且相互关注的问题。

Note:容器内的所有组件通常都在同一处理空间中执行。

C4的核心图(Core diagrams)有哪些?

Visualising this hierarchy of abstractions is then done by creating a collection of Context, Container, Component and (optionally) Code(e.g. UML class) diagrams. This is where the C4 model gets its name from.
通过创建上下文(Context)、容器(Container)、组件(Component)和代码(Code)来实现层次的可视化,这就是C4名称的由来。
C4四个抽象部分(以银行系统为例)
  • 第 1 层:系统上下文图(System Context diagram)
系统上下文图

在这一层级中细节并不重要,只需要显示系统概况。 重点应该放在人员(角色)和软件系统上,而不是技术,协议和其他低层级细节上,从而使非技术人员也能够看得懂。这个图也是明确需求的重要图示。

  • 第 2 层:容器图(Container diagram)
容器图

“容器”类似于服务器端Web应用程序,单页应用程序,桌面应用程序,移动应用程序,数据库架构,文件系统等。本质上,容器是可单独运行/可部署的单元(例如,单独的进程空间) )执行代码或存储数据。容器图显示了软件体系结构的高层结构以及如何在其间分配职责。 它还显示了主要的技术选择以及容器之间的通信方式。

注意:此图不需要表示非功能需求(怎么部署部署、实现高并发、高可用等)。

  • 第 3 层:组件图(Component diagram)
组件图

组件图显示了容器如何由多个“组件”组成,每个组件是什么,它们的职责以及技术/实现接口(API)或者细节。

  • 第 4层:(Code)

这一层是可选的,可以使用UML类图,实体关系图或类似的图。理想情况下,该图可以使用工具(例如IDE或UML建模工具)自动生成。

最后需要注意的是:

The C4 model doesn't prescribe any particular notation. A simple notation that works well on whiteboards, paper, sticky notes, index cards and a variety of diagraming tools is as follows.
C4模型没有规定任何特定的符号。 它是一种适用于白板,纸张,便签,索引卡和各种绘图工具的简单表示法。
总结
If I use a word to summarize the C4 model, it is: comfortable. The C4 model can't teach us how to design. It is more like writing and drawing on paper during design. However, this action does be the original impulse of software architecture.
如果用一个词来概括C4模型的话那就是:肆意。C4模型不能教会我们如何去设计,它更像是在设计时在纸上的写写画画,然而这个动作不正是软件架构的原始冲动吗。

Reference

Simon Brown,2013 IEEE先驱奖获得者,表彰他在软件架构模型和实践中的杰出贡献。Simon是C4模型的倡导者和实践者。

C4模型官网

Software Architecture for Developer

Five Things Every Developer Should Know about Software Architecture

Are You a Software Architect?

Measure
Measure
Related Notes
Get a free MyMarkup account to save this article and view it later on any device.
Create account

End User License Agreement

Summary | 19 Annotations
abstraction-first
2020/06/22 16:47
reflect how software architects and developers think about and build software
2020/06/22 16:48
easy to learn and use
2020/06/22 16:49
(人)Person
2020/06/22 16:50
软件系统)Software System
2020/06/22 16:50
容器)Container
2020/06/22 16:50
(组件)Component
2020/06/22 16:50
软件系统是最高级别的抽象
2020/06/22 16:51
容器代表托管代码或数据的事物
2020/06/22 16:52
“组件”一词在软件开发行业中是一个非常重载的术语
2020/06/22 16:52
Context, Container, Component and (optionally) Code(e.g. UML class) diagrams
2020/06/22 17:01
System Context diagram
2020/06/22 17:03
细节并不重要
2020/06/22 17:03
显示系统概况
2020/06/22 17:03
人员(角色)和软件系统上
2020/06/22 17:03
Container diagram
2020/06/22 22:31
Component diagram
2020/06/22 22:32
Code
2020/06/22 22:32
C4模型没有规定任何特定的符号
2020/06/22 22:32