目录
[架构师的 4 个困惑](#架构师的 4 个困惑)
[架构设计的 4 个主张](#架构设计的 4 个主张)
[1. 方法体系是大趋势](#1. 方法体系是大趋势)
[2. 质疑驱动的架构设计](#2. 质疑驱动的架构设计)
[3. 多阶段还是多视图](#3. 多阶段还是多视图)
[4. 内置最佳实践](#4. 内置最佳实践)
[ADMEMS 方法体系:3 个阶段,1 个贯穿](#ADMEMS 方法体系:3 个阶段,1 个贯穿)
[1. Pre-architecture 阶段:ADMEMS 矩阵方法](#1. Pre-architecture 阶段:ADMEMS 矩阵方法)
[2. Conceptual Architecture 阶段:重大需求塑造做概念架构](#2. Conceptual Architecture 阶段:重大需求塑造做概念架构)
[3. Refined Architecture 阶段:落地的 5 视图方法](#3. Refined Architecture 阶段:落地的 5 视图方法)
[4. 持续关注非功能需求:"目标 - 场景 - 决策"表方法](#4. 持续关注非功能需求:“目标 - 场景 - 决策”表方法)
【架构师之路】绪论
架构师的 4 个困惑
作为一名架构师,通常会遇到四个典型问题,要想成为一名架构师,这便是我们需要着重考虑的问题:
-
把系统 划分模块,如何更合理?
-
大规模系统 的架构设计,从何开始?
-
总觉得 需求很糟糕,影响了架构设计?
-
非功能需求 很重要,但如何设计?
架构设计的 4 个主张
在介绍具体解决方案之前,我们要先了解架构设计的 4 个核心主张,可以把它们视为准则:
-
方法体系 是大趋势。
-
质疑驱动 的架构设计。
-
多阶段 方法。
-
内置 最佳实践 的方法。
1. 方法体系是大趋势
为什么说"方法体系是大趋势"?因为单一方法无法解决复杂业务需求,架构师要覆盖"需求进,架构出"的全过程,这要用到"方法体系"。
这就不得不提到我们的主菜 -- ADMEMS。ADMEMS 是由多个方法组成的方法体系。
ADMEMS是Architectural Design Method has been Extended Method System的缩写。(将架构设计方法扩展到方法体系)
2. 质疑驱动的架构设计
为什么说架构设计是"质疑驱动"的呢?首先,毫无疑问,架构设计是需求驱动的,而不是模型驱动的。
但需求驱动的说法,不太传神 -- 我们不能把"一桶需求"倒进某台机器,然后等着架构设计自动被"加工生产"完毕。因此"需求驱动的架构设计 "给架构师的启发不够多。架构设计实际上是个"质疑驱动的过程"。
有些人提倡"用例驱动的架构设计",但它有 3 个明显的缺陷:
-
首先,需求 = 功能 + 质量 + 约束。(要做什么 + 做成什么样 + 有哪些限制)
-
然而,用例只是 功能需求 实际上的标准。
-
用例涉及、但不涵盖 非功能需求。
3. 多阶段还是多视图
阶段和视图:先做后做 -- 这是阶段;齐头并进 -- 这是视图。

架构设计 首先是多阶段的,其次才是多视图的。
任何好的方法,都必须 以时间轴去组织 ,因为这样才有利于 指导实践。
这个观点为什么对:
项目天然有先后流程:从前期对接需求、投标,到中标开发落地,这有客观的时间顺序。
不同阶段,产出物的用途不同:前期需要用较为粗略的概念架构去竞标;中标后,要细化为五视图架构指导开发。
比起多视图,多阶段更重要,以投标举例:
-
一方面,投标时,需要提供和讲解《方案建议书》,其中涉及架构的内容。
-
另一方面,团队并行开发时,需要《架构设计文档》指导开发。
-
但是,投标时讲的"架构"和并行开发时做为基础的"架构"不可能在同一个抽象层次上。前者叫"概念架构 ",后者叫"细化架构"。
-
如果投标失败,细化架构就没有必要做了。
-
概念架构设计和细化架构设计,是两个架构阶段,不是两个架构视图。所以,多阶段更重要。
4. 内置最佳实践
为了更好地解决业务需求,我们的方法应该 融入最佳实践经验 。ADMEMS 作为一个优秀的方法体系,它融入了实践经验。
ADMEMS 方法融入了哪些实践?
-
逻辑架构设计的 10 条经验。
-
质疑驱动的逻辑架构设计的整体思路。
-
基于鲁棒图进行初步设计的 10 条经验。
-
ADMEMS矩阵方法。 -
约束的 4 大类型。
-
......
ADMEMS 方法体系:3 个阶段,1 个贯穿
作为方法体系,ADMEMS 方法通过 3 个阶段和 1 个贯穿,来覆盖"需求进,架构出"的架构设计完整工作内容。

分析每个阶段:
-
预备架构阶段 (
Pre-architecturePA)-
最大误区:架构师是技术人员,不必懂需求。(架构设计是需求驱动的 -> 是质疑驱动的)
-
实践要点:摒弃"需求列表"方式,建立 二维需求观。
-
思维工具:
ADMEMS矩阵等。
-
-
概念架构阶段 (
Conceptual ArchitectureCA)-
最大误区:概念架构 = 理想架构。
-
实践要点:对重大需求塑造概念架构。
-
思维工具:鲁棒图、目标 - 场景 - 决策表等。
-
-
细化架构阶段 (
Refined ArchitectureRA)-
最大误区:架构 = 模块 + 接口。
-
实践要点:贴近实践的 5 视图法。
-
思维工具:包图、包 - 接口图、灰盒包图、时序图、目标 - 场景 - 决策表等。
-
3 个阶段之间的先后顺序非常重要,否则就不能称之为"阶段"了。
-
试想,如果在 PA 阶段对需求理解不全面(例如遗漏了需求)、不深入(例如没有发现"高性能"和"可扩展"是两个存在矛盾的质量属性),后续设计不可能合理。
-
试想,如果 CA 阶段的概念架构设计成果没有反映系统的特点就"冲"去做 RA 设计,会造成更多的设计返工。
1 个贯穿指的是,在架构设计的过程中要始终考虑非功能需求。
1. Pre-architecture 阶段:ADMEMS 矩阵方法
PA 阶段的使命,是:全面理解需求,从而把握需求特点,立足于需求去设计架构 。 其中,ADMEMS 矩阵是方法的核心。

2. Conceptual Architecture 阶段:重大需求塑造做概念架构
概念架构 ≠ 理想化架构。
所以,必须考虑包括 功能 、质量 、约束 在内的所有方面的需求。
如下是概念架构的设计步骤:

3. Refined Architecture 阶段:落地的 5 视图方法
细化架构是相对于概念架构而言的。
细化架构阶段的总体方法为 5 视图方法。

许多架构师,提到架构必谈 OO。在他们的思想里,OO 方法已经完整覆盖了架构设计的所有方法和技巧。这种看法是片面的。
例如,上图中提到的 物理架构 、开发架构 、运行架构 和 数据架构 这 4 个架构视图,分别是 面向节点 、面向文件 、面向控制流 和 面向 Table 或文件 的 -- 也就是说,这 4 个架构视图主要的思维并非 OO 思维。
另一方面,即使是逻辑架构的设计,也不一定是以 OO 方法为指导的。应该把逻辑架构设计总结为 "面向职责" 更贴近本质。
4. 持续关注非功能需求:"目标 - 场景 - 决策"表方法
非功能需求不可能是"速战速决"的,连编码都会影响到性能等非功能属性,更何况概念架构设计和细化架构设计。
ADMEMS 方法有应对非功能需求的思维工具 -- 目标-场景-决策表,它可以把架构师的思维可视化出来。
