第 22 章. 受益相关要素
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
什么是软件设计?我不喜欢一开始就下定义,但我们现在几乎还没有开始。你们已经看到了我所说的设计的例子。你们已经看到了单个决策是如何串联起来实现更大目标的。你们已经初步了解了我所说的 "软件设计是人际关系的练习"。现在,我可以说出我所说的 "软件设计 "的含义了:将各种元素有益地联系在一起。
对于一个大概念来说,字数并不多。每个单词的分量都很重。让我们把它们拆开,,然后再拼起来。
要素
大型建筑都有部件。
细胞器 → 器官 → 有机体。
原子 → 分子 → 晶体。
在我们的世界里:标记 → 表达式 → 语句 → 函数 → 对象/模块 → 系统。
元素是有边界的。你知道它们的起点和终点。
元素包含子元素。在我们的世界里,我们喜欢同质的层次结构(如复合模式)。自然层次结构和前面的例子一样,并不是同质的。所包含的子元素与容器不同。(我不确定这一点是否非常重要,但我喜欢把它牢记在心--总有一天,我会写一本关于软件设计是一个自然过程的真正哲学著作)。
相关
好了,我们有了一个由元素组成的层次结构。这些元素相互关联。一个函数调用另一个函数。函数就是元素。"调用/被调用 "是一种关系。在自然界中,我们有 "吃"、"遮荫 "和 "施肥 "等关系。
在软件设计中,我们有一些类似的关系:
-
唤起
-
出版
-
聆听
-
指代(如获取变量值)
受益
神奇之处就在这里。一种设计方案是将微小的子元素组成一个巨大的汤。想想带有全局命名空间的汇编语言。这个程序可以运行。从外部观察者的角度来看,它的行为与精心设计的程序完全一样。但很快,我们就无法改变它了。元素之间的关系太多了,而且往往是隐含的。
当我们在设计时,在机器指令和整体之间创建中间元素时,这些中间元素就会开始相互受益。函数 A 可以更简单,因为函数 B 可以解决部分计算的复杂性。
有利相关因素
对 "有益相关要素 "的一种解读是从 "设计是.... "开始的。设计是什么?就是元素、它们之间的关系以及从这些关系中获得的益处。
另一篇文章的开头是 "设计师是...."。设计师是做什么的?从这个角度看,软件设计师只能:
-
创建和删除元素。
-
创建和删除关系。
-
提高关系的效益。
很简单吧?(← 讽刺警告)
举一个我最喜欢的例子。我有一个对象,它在一个函数中两次调用另一个对象:
caller()
return box.width() * box.height()
调用函数与方框有两种关系,即调用两个函数。让我们把表达式移到方框中:
caller()
return box.area()
Box>>area()
return width() * height()
从设计的角度来看,我们创建了一个新元素Box.area() ,并调整了调用者和框之间的关系。现在,它们之间只需调用一个函数,这样做的好处是调用函数更简单,而代价是Box 变大了一个函数。
当我谈到系统结构时,我说的是:
-
元素层次结构
-
元素之间的关系
-
这些关系带来的益处
现在,我们可以对系统的结构和行为做出更明确的区分。
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