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

  • 安全:只关注系统是否有安全风险 , 例如是否可能被注入恶意代码、是否有权限漏洞等;如果经历过安全评审 , 应该很有体感;
  • 产品:大部分情况下只关心项目能否按期上线 , 其他方面...可能表面上表示些许关心 , 实际上要么并不在乎要么真的不懂 。
  • 3. 自顶向下逐层描述
    架构制图:工具与方法论
    本文插图
    架构制图的第三要点 , 是合理运用层次化(hierarchical)的套路 , 自顶向下逐层描述 。 无论是 C4 模型还是 arc42 模板 , 背后都深刻运用并显著强调了这一点 。 为什么一定要这么做?其中蕴含了两个普适的原理:
    • 分而治之:软件领域中 , 分而治之是控制和应对复杂系统的最有效方法 。 而层次化拆分 , 本质上就是一种分而治之手段:将系统按照从粗到细的粒度 , 一级一级地拆分成多个相对独立和低耦合的元素(子系统、应用、组件等);
    • 金字塔原理:这本书的核心观点就是 , 按照自顶向下的方式 , 先抛出主观点再依次用各个子观点去论证 。 这样的沟通方式更符合人类的思维逻辑 , 也更容易让读者接受 。 简单来说 , 就是要“先说重点” , 帮助读者做归纳总结和划重点 , 而不是先抛出一大堆细枝末节的零散东西让读者自己去消化和推演 。
    4. 使用多种架构视图
    架构制图:工具与方法论
    本文插图
    架构制图的第四要点 , 是在向传统的工程制图方法论致敬:使用多种架构视图来描述你的架构 。 在工程制图的世界里 , 任何立体的制品 , 大到机床小到零件 , 都至少需要通过三种视图(主视图、俯视图、左视图)来描述 。 作为现实世界的映射 , 软件系统也是多维和立体的 , 只用单一视图不可能覆盖所有关键的架构信息;即使强行把这些信息都塞在一张图里 , 那也一定会复杂到让人无法理解 。
    在架构设计领域 , 架构视图(architectural view)有专门的定义:针对系统架构某一个方面(aspect)的一种描述;每个视图都会覆盖项目干系人的一种或多种关注点 。 从上述定义可以看出来 , 不同的架构视图会有不同的侧重点 , 同时在描述自己所专注的方面时也会略去与当前视图无关的其他细节 —— 这其实也是一种与层次化拆分类似的分而治之思想 , 只不过这里是针对完整系统的维度分解 , 而层次化则是针对某一具体视图再做自顶向下的垂直下钻(drill-down);两者是正交且可以相互配合的 , 例如前面说到的结构视图、部署视图甚至动态视图 , 都可以分别再进行层次化拆分 。
    5. 遵循规范和最佳实践
    架构制图:工具与方法论
    本文插图
    架构制图的第五要点 , 其实只是一句正确的废话:遵循规范和最佳实践 。 这一点已经不限于架构制图 , 而是上升到了工程实践领域的通用方法论层面 。 正如前面章节所说 , “学习架构制图的目标 , 就是要把它从一门手艺变成一项工程” , 因此架构制图的“施工”过程也理所应当符合工程化思维:
    • 一方面 , 制图需要遵循明确的规范 , 在理论层面进行约束和指引 , 确保过程和产物的高质量与标准化;
    • 另一方面 , 制图还需要遵循业界最佳实践 , 在实践层面持续吸取优秀经验 , 不断精进自己和团队的制图技能 。
    附:架构描述标准化概念模型
    国际上对架构描述其实建立了专门的标准(ISO / IEC / IEEE 42010:2011) , 其中的很多概念词汇在本文中都有提到(e.g. Stakeholder、Concern、View、Viewpoint) , 有兴趣的同学可以进一步研究下 。
    架构制图:工具与方法论


    推荐阅读