架构制图:工具与方法论( 七 )


  • 逻辑视图(Logical view):描述系统为终端用户提供的功能 , 一般会通过UML中的类图和状态图来表示;
  • 过程视图(Process view):描述系统的动态行为 , 包括流程和交互等 , 一般会通过 UML 中的时序图、活动图和通讯图来表示;
  • 开发视图(Development view):从程序员的视角来阐述系统 , 也被称为“实现视图” , 一般会通过 UML 中的组件图和包图来表示;
  • 物理视图(Physical view):从系统工程师的角度来描述系统 , 包括系统组件的物理拓扑、各组件之间的物理连接 , 也被称为“部署视图” , 一般会通过 UML 中的部署图来表示;
  • 场景(Scenarios):通过一小组用例或场景来描述架构 , 包括系统中各种对象和进程之间的交互时序 , 也被称为“用例视图” 。 这些场景会被用于识别架构元素(architectural elements)以及阐述和验证整个架构设计 , 也可以被作为架构原型的测试起点 。
虽然上面提到“4+1”的各种视图一般都是用UML图来表示 , 但实际上“4+1”本身是一种通用的视图模型 , 并没有限制绘图的记号和工具 。 对于工程师而言 , 这种偏学院派的方法可能这辈子都不会直接用到 , 但其中蕴含的一个关键架构制图思想非常有价值:架构需要通过多种视图来描述 , 而这些视图是来源于不同项目干系人的视点(角度);只有这样才能产生一整套全面、立体且客观的架构描述 。
3. 方法三:C4 Model
C4 模型是一种“抽象优先”(abstraction-first)的架构制图方法 , 它也是受前面的 UML 和“4+1”视图模型所启发 , 但相对而言要更加简单和轻量 , 只包含少量的一组抽象和图表 , 很易于学习和使用 。
1)定义、理念与关键思想
架构制图:工具与方法论
本文插图
C4 模型通过容器、组件、代码以及人这几个抽象来描述一个软件系统的静态结构 , 它的核心理念是希望像 Google Map 一样 , 通过不同层次的细节 , 为代码建立一种可以放大和缩小的导览图 。 它最关键的思想就是自顶向下对系统的静态结构进行逐级拆分 , 依次描述各层次对象的职责、关系和外部依赖 。 除了核心的层次化静态结构视图 , 它还可以包含动态视图、部署视图等补充视图 。
架构制图:工具与方法论
本文插图
上面的左图展示了 C4 模型中各层次抽象之间的映射关系:1 个软件系统由 1~N 个容器组成 , 1 个容器由 1~N 个组件组成 , 1 个组件由 1~N 个代码结构组成 。 右图是以简单的 Spring PetClinic 项目为例 , 演示了一个真实软件系统在 C4 模型下的层次结构:最上层就是 PetClinic 软件系统 , 它可以拆分为数据库、Web 应用等几个容器;Web 应用又可以进一步拆分出 ClinicService 这个组件 , 而这个组件下又包含了 ClinicService 接口类、ClinicServiceImple 实现类、Owner / Pet / Visit 等领域对象类 。
使用 C4 模型进行架构制图 , 本质上就是对上述几种抽象进行可视化 。 具体的做法是依次建立如下几类从粗到细的结构图:Context、Container、Component 和Code(可选) , 这也是 C4 模型名称的来历 。
2)Level 1:System Context diagram
架构制图:工具与方法论
本文插图
系统上下文图作为第一级(L1) , 提供了一个展示系统全貌的顶层大图(big picture)视角 , 包括最中心的软件系统、周边的用户以及其他有交互的系统 。 其中最关键的两个概念分别是: