人人都是架构师:通过C4模型快速构建软件架构

作者:邓冰寒

        我在面试软件工程师的时候,通常会问候选人的职业规划,大部分人希望在未来3-5年成为一名架构师。在大多数人开发人员的眼里,架构师是一种令人向往的职位,不过我认为架构师不仅仅是一种职位,更应该是一种角色,这样人人都是架构师。

        首先,人人都是架构师,并不是说人人都要做架构师这个职位。如果开发人员具备以下七核心能力:编程能力、调试能力、编译部署能力、性能优化能力、业务架构能力、在线运维能力、项目管理能力和产品规划能力,就能向上提升成为一名优秀架构师;但那些在象牙塔下绘制大量UML图,以及写了几百页无人问津的Word文档的“伪架构师”,他们不参与代码的编写,被业界戏称为“AaaS(Archtecture as a Service)”--架构即服务。

        一直以来,架构设计仍然被很多开发人员所误解,认为架构设计是架构师的工作,自己只是一位写代码的工程师,接过产品经理递过来的原型图就直接撸码单干了。对于业务简单的项目来说,是可以这么做。但随着业务的增长,代码就会堆积成一个“大泥球”。

        其次,人人都是架构师,说的是人人都可以担当架构师这个角色。正如在二十年前,汽车司机是一种令人羡慕的职业,随着时代的进步,汽车已经当做普通人的代步工具。是的,当今依然有开大货车、大巴车的专业司机,但是不妨碍我们人人都可以作为司机的角色,自己开车着小汽车代步。作为新时代的开发人员,是否有一种架构设计的“代步工具”?这样的话,人人都能是架构师。C4模型,就能助力开发者快速构建软件架构。

C4模型


        C4模型的理念是将系统分为:System Context(系统上下文)、Container(容器)、Component(组件)、Code(代码),每层代表不同的视图架构,每层适用与不同的人员,针对当前的人员角色,找到共同的关注点来形成统一认知。

图1
图2

        从上图可知,我们在使用C4模型来描述组件的软件架构时,可以通过放大进入下一层,把架构从宏观到细节展示出来,正如我们从地图上找一个地方一样,先总览国家(对应C4的系统上下文),然后到省(对应C4的容器),再到市(对应C4的组件),最后到街(对应C4的代码)。这四种不同的抽象层次让不同的角色都能找到适合自己的内容,并在此基础上进行讨论形成共同认知,即DDD所称的通用语言。

图2

让我们以一个出行应用举例说明每一层都有什么含义。

第一层、系统上下文(System Context)

        在这一层的用户角色主要是业务人员,产品经理,架构师,开发人员,特别是业务人员,他们不关注技术细节,但是对业务领域非常熟悉,也就是DDD所称的领域专家。

        一般情况下,会由产品经理或架构师来绘制系统上下文。如果产品经理和业务人员在不了解技术细节的情况下,都能看懂系统上下文,对于要实现这个业务逻辑的开发人员来说,更不在话下。所以开发人员应该以架构师的角色来了解业务逻辑,并绘制出C4架构图中的系统上下文。只有这样,开发人员才能拔高层次,转变传统思维,站在更高的层次来设计软件系统。通过C4模型来设计软件架构,能降低沟通成本,让开发人员在设计之初就和业务人员达成统一的认知,不至于偏离方向。

图3

第二层、容器(Container)

        这一层是从系统上下文放大进入的效果,我们以出行应用中的高铁票务系统为例,在这里各个服务及存储的职责和依赖关系。这层是给有技术背景的角色看的,描述的应用是进程级别的应用,可以直接部署与运行,通过这层可以了解清楚软件的职责描述。

图4

第三层、组件(Component)

        这一层是容器层的放大,看到的是一个服务内部的组件,例如我们的出行应用订单服务组件架构,可以清楚的看到服务内部组件之间的关系。同时,还可以通过代码片段来辅助开发人员的理解。


图5

第四层、代码(Code)

        代码层是组件层的放大,通常是使用UML图来描述组件的细节。我们在上面提到,设计要适中,实际上绘制UML图的投入产出比比较低,因此现在大部分开发人员都不会绘制UML图。我们也就不重点讲解。

C4模型优势


使用一致的标准直观地描述软件系统

        使用一致的标准降低了沟通成本,意味着你将在会议上花更少的时间,实现降本增效

加强图标的创建和维护

        用对象创建图标,以便从任何地方同步更改,从而无需在多个地方查找相同的对象

通过放大、缩小来呈现不同层次的细节

        通过简单地放大更多细节和缩小上下文,为每位用户或观众呈现正确的细节,而不是重复维护多个文档

        人人都是架构师,需要开发人员转变思维,以架构师的角色来设计产品架构。当然,要实现人人都是架构师,并不是一件容易的事。但通过C4模型来设计架构,可以大大降低架构设计的门槛。

        通过C4模型架构图设计理念,即使是个普通的开发人员,也可以很容易的去设计软件架构。可以预见,在不久的将来,就如现在的汽车司机一样,有专业的架构师,但是不妨碍开发人员都成为架构师的角色,更加贴近业务,设计出符合企业核心业务的架构。


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容