最近参加了几次设计评审,感觉大家对如何说清楚一个系统架构不是很清楚。很多同学上来就讲表结构,或者上来就讲API接口文档。也不知道参会的其他同学是什么感觉,反正我是听得一头雾水。

那么怎么才能说清楚一个软件架构呢?

架构图

我猜很多人肯定会想到画图呀,架构图。没错,关键是怎么画呢?

在这里,介绍一个C4模型

C4模型是一种用于可视化软件架构的方法,它由Simon Brown提出,旨在帮助软件开发团队描述和沟通软件架构,无论是在前期设计阶段还是在回顾现有代码库时。C4模型的名称来源于它包含的四种抽象层次:Context(上下文)、Container(容器)、Component(组件)和Code(代码)。

Context层描述了软件系统所处的环境和范围,以及与之交互的人员和其他系统。Context层可以用一个系统上下文图来表示,显示出软件系统的名称、边界、职责、用户和外部依赖。

Container层放大了软件系统内部,展示了系统由哪些高级技术构建块组成,例如Web应用程序、移动应用程序、数据库、消息队列等。Container层可以用一个容器图来表示,显示出容器的名称、类型、技术选择、职责和关系。

Component层进一步放大了容器内部,展示了容器由哪些组件组成,以及组件之间是如何协作的。组件可以根据不同的标准进行划分,例如职责、功能、模式或者框架。Component层可以用一个组件图来表示,显示出组件的名称、类型、职责和关系。

Code层最终放大了组件内部,展示了组件是如何实现的。Code层可以用一个代码图来表示,例如UML类图,显示出类的名称、属性、方法和关系。

每一个层次它都有一种类型的图,具体可以去官网看一下。四个层次的关系大概是这样

结构层次

所以,软件架构属于用来说清楚一个事物的结构的,而C4模型告诉我们,谈结构的时候一定要说清楚在什么样的抽象层次来谈。这非常的重要。

现实生活中,很常见的说层次结构的图就是地图。而每张地图上面一定会有一个比例尺,比例尺其实就告诉了我们这个地图是在什么样的一个抽象层次上来描述地理位置。

我们通过地图来查找一个地方的时候,也通常会从一个抽象层次较高的位置开始,逐层展开。这符合人的思维习惯,由高至低,由大到小。

C4模型其实就是干了这么一个事,只不过它明确了架构图应该有的几个层次是什么,如果大家都follow这么一个规范,那么交流架构会变的比较轻松。

更进一步

我们把这个话题再推进一步,其实要说清楚任何一个事情都是有技巧的。

如果你是要解释一个解决问题的方案,那么可以遵循:SCQA框架。

如果你是在讲一个故事,那么可以抓住:时间,地点,人物,情节。

如果你是在表达一个观点,那么可以围绕:论点,论据,结论。

…………

那么再进一步,如果你要说清楚一个事,请抓住它的脉络