第 23 章 画线
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
没有线条的建筑可能不是建筑
汽车的功能结构
上面的草图描绘了 汽车的结构。所有重要的部件都在这里,包括它们之间的关系:发动机在引擎盖下;乘客座椅适当地位于乘客舱内,靠近方向盘;车轮很好地装配在汽车底盘的底部。这幅图似乎符合大多数建筑学的定义(除了我最喜欢的定义,因为我在寻找决策;见第 8 章)。
然而,这对了解汽车的功能却没有什么帮助:油箱离发动机很远,可以省略吗?发动机和变速箱并列在引擎盖下是巧合还是有特殊关系?汽车需要四个轮子还是三个轮子也可以?如果要分阶段制造汽车,先组装哪一部分比较合理?只组装带座椅的车厢是否是一个好的开始?如何区分好车和坏车?哪些方面是几乎所有汽车都有的(例如,车轮在底部),哪些方面各不相同(保时捷 911、大众甲壳虫或 DeLorean 的车主会很快指出他们的发动机不在引擎盖下面)?
这幅图并没有真正回答这些问题。它描绘了各部件的位置,但没有表达它们在整个系统 "汽车 "中的关系或功能。尽管这幅图在事实方面是正确的,实际上也相当详细,但它并不能让我们推理出它所描述的系统,尤其是它的行为。 巧合的是,它可能也不是图表驱动设计的好例子(第 22 章)。
请看这条线
图中缺少的关键元素是连接组件的线条。没有线条,就很难表现丰富的关系。线条是如此重要,以至于方框、标签和线条足以构成肯特-贝克半开玩笑的银河建模语言。1没有线条,就没有什么建模语言了。此外,正如人们常说的,"线条比方框更有趣"。通常是哪里出了问题?在两个经过充分测试的部件之间的整合中。我需要在哪里实现强耦合或松耦合?盒子之间。如何区分结构良好的架构和一团烂泥?2通过线条。
图 23-1 举例说明了线条的重要性。
图 23-1. 没有线条的架构图毫无意义
左边的系统和右边的系统由相同的组件A、B、C 和D 组成,这两个系统会有不同的属性和行为吗?左边的系统有一个整齐的分层架构,它提供了清晰的依赖关系,可以很容易地用不同的组件替换某个组件。但由于信息或命令必须依次通过每个组件,因此也会造成较长的延迟。此外,每个组件都可能成为单点故障:如果C出现故障,链条就会中断,系统就无法运行。
右边的系统几乎具有完全相反的特性:相互依赖关系有点混乱,因此很难更换组件。不过,该系统提供的通信路径更短,弹性更大:如果C出现故障,A仍可与D 通信。
例 23-1.
如果我看到一个没有线条的架构图,我会倾向于拒绝它,因为它无法表达系统的行为。
现在想象一下,这个图没有线条。你永远不会知道这个系统是像左边还是右边那样构建的,结果就是一个毫无意义的架构图。因此,如果我看到一张没有任何连接线的架构图,我就会怀疑它是否是对架构的有意义描述。 不幸的是,很多图都没有通过这一基本测试。
元模型
说 汽车图没有显示任何关系并不完全正确。这幅图确实包含了两个组件之间的主要关系:
- 遏制
-
一个盒子被另一个盒子包围。
- 邻近性
-
有些盒子彼此靠近,有些则相距较远。 ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access