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

  • 部署图(Deployment diagram):除了缺失动态属性 , 上述结构图还有一个局限性:只描述了系统的抽象逻辑架构 , 并没有描述出系统实际部署时的具体物理架构 。 因此 , C4 模型推荐再使用 UML 的部署图 , 对系统逻辑节点(一般是 L2 的“容器”粒度)与物理节点(e.g. 物理机 / 虚拟机 / Docker 容器 / 应用 Runtime)之间的映射关系进行补充描述 , 即“虚实结合” 。
  • 结合了这些补充图后的 C4 模型 , 才是可以全面与立体地描述出软件架构方方面面的完全体架构制图方法 。
    4. 方法四:arc42
    架构制图:工具与方法论
    本文插图
    严格来说 , arc42 并不是一种架构制图方法 , 而是一个架构文档模板 。 虽然如前文所说 , 在架构描述中“图”是比“文字”更高优的选择 , 但实际项目过程中你终究还是需要产出一份相对完整、有图有文字的架构文档 。 arc42 就是专门用于帮助大家更好地编写架构文档;而作为架构文档中最重要的架构图 , 显然 arc42 也不会放过 —— 其中多个核心章节都与架构图有关 , 且详细描述了相应的制图方法 。 这里不会详细展开介绍 arc42(不能抢了下一篇文章的饭碗) , 只会简单介绍下 arc42 中制图方法与 C4 模型的异同 。
    伟大的思想都是相似的 , arc42 也不例外 。 上方左图的右侧部分 , 概括了 arc42 模板中与制图相关的几个核心章节 , 分别是:
    • 第 3 章 -Context:该章节用于介绍系统的背景和上下文 , 因此其制图思路几乎等同于 C4 模型中的 L1(系统上下文图);
    • 第 5 章 -Building block view:该章节用于介绍系统的基本构成要素 , 按照官方指导思想也与 C4 模型中的自顶向下层次化拆分思想无异 , 唯一区是 arc42 并没有规定拆分的具体层次 , 只要有需要可以按照“黑盒 -> 白盒”的套路一直拆到底;
    • 第 6 章 - Runtime view:看名字就无需解释了 , 就等同于 C4 模型中补充的运行时视图;
    • 第 7 章 -Deployment view:同样地 , 这里也等同于 C4 模型中补充的部署视图;但有一点 , arc42 强调部署视图也可以类似结构视图一样做自顶向下的层次化拆分(对于较为复杂的部署架构 , 层次化确实很有必要) 。
    因此 , 本质上 arc42 中提倡的制图方法与C4模型是等价和兼容的 , 完全可以配合使用:以 arc42 作为架构文档框架 , 其中的架构制图采用更具体的 C4 模型 。 这也是目前我们项目中实际采用的方法 。
    5. 其他方法 & 制图工具
    架构制图:工具与方法论
    本文插图
    除了上述几种方法以外 , 在软件行业蓬勃发展的数十年间也涌现出过很多其他的优秀架构制图方法 , 其中既包括一些通用方法 , 如:SysML、AADL、ArchiMate , 也包括一些领域特定方法 , 比如在企业中后台业务建模场景中很常见的 BPMN 。 再详细地展开描述各个方法 , 显然会让本文又臭又长(虽然写到这里时似乎就已经注定了) , 有兴趣的读者可以自行检索和探索 。
    到这里为止 , 本章节介绍的都是架构制图的各种方法;而实际从方法到落地的过程中 , 还有一个绕不开的环节:选用什么样的工具去制图?总不能真的跟写工程制图作业一样用纸和笔吧?作为数字化改革的推动者 , 程序员们当然要全面拥抱数字化工具;大家日常工作中必然也已经积累了很多顺手的画图工具 , 因此这里我只推荐两个自己用得比较多的: