工程能力之C4模型
概述
刚在InfoQ上看到一篇介绍C4Model的文章,觉得这个模型设计的很赞,很有指导意义,做个简单的记录.
Why,为什么需要架构图?
ThoughtWorks中国
文章中有几句话我觉得很有道理,这里直接摘抄.
“纸上的不是架构,每个人脑子里的才是” ; “那些精妙的方案之所以落不了地,是因为没有在设计上兼容人类的愚蠢”。
我觉得,软件工程,或者软件中的术语发明的原因就是为了减少沟通的障碍,让大家在一个 平台 上对话.
而架构图可以起到如下作用;
- 一方面: 让软件的开发人员自己,以及和软件开发相关的用户,PM等人员都能快速了解一个系统的业务模型;
- 另一方面: 利于开发人员相互之间协作,定下方案,因为自然语言是有模糊地带的,难以无歧义的传达;
- 利于软件系统的维护,一图胜千言.
What,C4 是什么呢?
详细的讲解,可以参考InfoQ的文章,这里做个总结.
C4 4个单词的首字母为C的单词的代表, 分别为: 上下文(Context),容器(Container),组件(Component)和代码(Code);
依据不同的受众,分别抽象出了这四个级别.其中容器(应用程序、数据存储、微服务等,组件和代码来描述一个软件系统的静态结构.
第 1 层:系统上下文
显示了正在构建的软件系统,以及构建的系统与用户及其他软件系统之间的关系。
这个层级的图,关注的是用户层面看到的关系,注重的是和准备开发的系统与外部系统和交互人之间的关系.
将用户,你的代建系统,已有的其他系统用不同的颜色进行区分;
第 2 层:容器
将软件系统放大,显示组成该软件系统的容器(应用程序、数据存储、微服务等)。
在这个层级,已经关注系统本身了,开始关注这个系统有哪些部分组成,不过粒度非常粗.
第 3 层:组件
将单个容器放大,以显示其中的组件。这些组件映射到代码库中的真实抽象(例如一组代码)。
在这个层级,关注的已经是系统中的模块具体的功能了,这部分可能对应了具体的功能模块.
第 4 层:代码
如若必要,可以放大个别组件,以显示该组件的实现方式。 一般以UML图的形式展示;
这个层级,是具体的开发人员关注的实现细节了,用于具体的功能逻辑的分析和展示.
How,怎能画图呢?
在C4官网,下有个Tooling节点,讲述了目前已有的几个画图工具.