工程能力之C4模型
概述
刚在InfoQ上看到一篇介绍C4Model的文章,觉得这个模型设计的很赞,很有指导意义,做个简单的记录.
Why,为什么需要架构图?
ThoughtWorks中国 文章中有几句话我觉得很有道理,这里直接摘抄.
“纸上的不是架构,每个人脑子里的才是” ; “那些精妙的方案之所以落不了地,是因为没有在设计上兼容人类的愚蠢”。
我觉得,软件工程,或者软件中的术语发明的原因就是为了减少沟通的障碍,让大家在一个 平台 上对话.
而架构图可以起到如下作用;
- 一方面: 让软件的开发人员自己,以及和软件开发相关的用户,PM等人员都能快速了解一个系统的业务模型;
- 另一方面: 利于开发人员相互之间协作,定下方案,因为自然语言是有模糊地带的,难以无歧义的传达;
- 利于软件系统的维护,一图胜千言.
What,C4 是什么呢?
详细的讲解,可以参考InfoQ的文章,这里做个总结.
C4 4个单词的首字母为C的单词的代表, 分别为: 上下文(Context),容器(Container),组件(Component)和代码(Code);
依据不同的受众,分别抽象出了这四个级别.其中容器(应用程序、数据存储、微服务等,组件和代码来描述一个软件系统的静态结构.
第 1 层:系统上下文
显示了正在构建的软件系统,以及构建的系统与用户及其他软件系统之间的关系。
这个层级的图,关注的是用户层面看到的关系,注重的是和准备开发的系统与外部系统和交互人之间的关系.
将用户,你的代建系统,已有的其他系统用不同的颜色进行区分;
第 2 层:容器
将软件系统放大,显示组成该软件系统的容器(应用程序、数据存储、微服务等)。
在这个层级,已经关注系统本身了,开始关注这个系统有哪些部分组成,不过粒度非常粗.
第 3 层:组件
将单个容器放大,以显示其中的组件。这些组件映射到代码库中的真实抽象(例如一组代码)。
在这个层级,关注的已经是系统中的模块具体的功能了,这部分可能对应了具体的功能模块.
第 4 层:代码
如若必要,可以放大个别组件,以显示该组件的实现方式。 一般以UML图的形式展示;
这个层级,是具体的开发人员关注的实现细节了,用于具体的功能逻辑的分析和展示.
How,怎能画图呢?
在C4官网,下有个Tooling节点,讲述了目前已有的几个画图工具.
参考
工程能力之C4模型的更多相关文章
- 软件架构系列一:C4模型
本文要点预览:因为软件系统的分布式特点以及开发团队的分布性,了解软件架构的基础变得越来越重要.而在过度设计和毫无设计之间,我们应该把注意力放在对软件系统有重大影响的决策和权衡上.好的架构师应该是团队的 ...
- 京东云开发者|软件架构可视化及C4模型:架构设计不仅仅是UML
软件系统架构设计的目标不在于设计本身,而在于架构设计意图的传达.图形化有助于在团队间进行高效的信息同步,但不同的图形化方式需要语义一致性和效率间实现平衡.C4模型通过不同的抽象层级来表达系统的静态结构 ...
- 西蒙布朗-C4模型
关于 C4 模型的一些解释 C4 模型是来自 software architecture for developers 一书的定义,指的是 Context 上下文场景.Container 容器.Com ...
- python debug小技巧&&工程能力的几点建议
Debug小技巧: 转载请声明本文的引用出处:仰望大牛的小清新 1.初次编程时,在每一个if后面都写上else,这样,如果你的else原本是不应该运行的,那么就可以在else中输出此时的状态信息便于排 ...
- https://docs.huihoo.com/infoq/qconbeijing/2016/day1/工程效率提升专题/2-2-支持百度万人开发的工具装备及百度工程能力建设-夏仲璞.pdf
https://docs.huihoo.com/infoq/qconbeijing/2016/day1/工程效率提升专题/2-2-支持百度万人开发的工具装备及百度工程能力建设-夏仲璞.pdf http ...
- C4 模型 - 可视化架构设计
前言 世界上最难的两件事是: 1. 把我的思想放进你的脑袋 2. 把你的钱放进我的口袋 第二点我们不探讨,因为这是众所周知的,不信?过来试试:) 对于第一点,对我们程序员来说,其实也是我个人一直强调的 ...
- 工程能力UP | LightGBM的调参干货教程与并行优化
这是个人在竞赛中对LGB模型进行调参的详细过程记录,主要包含下面六个步骤: 大学习率,确定估计器参数n_estimators/num_iterations/num_round/num_boost_ro ...
- 什么是ICD文件
ICD就是IED Capability Description的简称,中文为IED能力描述文件.其中 IED是Intelligent Electronic Device的简称,是智能电子设备 智能电子 ...
- 能力成熟度模型CMM
能力成熟度模型(Capability Maturity Model,英文缩写为CMM)[1]是 一种开发模型.Carnegie Mellon大学的研究人员从美国国防部合同承包方那里收集数据并加以研究, ...
随机推荐
- Windows启动控制台登录模式
效果如下: 实现代码: Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Lo ...
- docker - kubernetes 网络(转)+ 架构图
1.host网络 连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样.可以通过--network=host指定使用 host 网络.docker ...
- 初次接触ARM开发,理清这四个开发思路很重要!
初次接触ARM开发,理清这四个开发思路很重要! 由于涉及编程,学习ARM单片机系统对于从事电子电路的设计者来说是有些困难的,学习知识不难,难的是理清其中的开发思路,找到一个好的起点.本文就将从这一步入 ...
- Oracle ora-12514监听程序当前无法识别连接描述中请求的错误
昨天刚安装好oracle数据库,还可以登录,到今天,登录时就发出了这样的错误 到网上找了半天,上面都是说监听器服务的问题,但是试过后依旧不行.最后重启了一次,就解决了异常 原来是oracle中一个服务 ...
- CO借贷标识及转换
前台提前数据源0CO_PC_01的数据时发现借贷方有O.C.S.D.不是传统的FI借贷标识(S = 借记,H = 贷记). 由"D"指出贷方记帐.从以下项中发生这些记帐 财务会计中 ...
- K8S学习心得 == 安装虚拟路由器RouterOS
使用RouterOS, 搭建虚拟路由器,并且配置多个网关互通.配置步骤如下. 基础配置 1. RouterOS 服务器,设置如下 2. VM 不同网段的设置 == 192. ...
- 第一次作业:基于Linux 4.5的进程模型与调度器分析
1.操作系统是怎么组织进程的? 1.1什么是线程,什么是进程: 刚接触时可能经常会将这两个东西搞混.简单一点的说,进程是一个大工程,线程则是这个大工程中每个小地方需要做的东西(在linux下看作&qu ...
- freemarker时间转换
Freemarker日期函数处理[转] (2012-08-01 14:32:13) string(当和一个日期值一起使用) 这个内置标签用指定的格式把日期转换成字符串,(把默认的格式用FreeMa ...
- TinkerPop简述
ThinkerPop Apache 顶级项目 概述 TinkerPop是一个面向实时事务处理(OLAP)以及批量.分析型(OLTP)的开源的图计算框架.TinkerPop是一个可以应用于不同图形数据库 ...
- ubuntu终端下快捷键之--字体放大缩小
1.快捷键 Ctrl - 字体缩小 Ctrl + (有的电脑是“Ctrl Shift +” 三个按键同时按下)字体放大 Ctrl 0 恢复默认字体 2.终端设置默认字体 在终端下,点击右键- ...