5.4.1 层次化体系结构

层次化设计是构造复杂系统的一个基本方法,按此方法设计出的系统具有层次化体系结构。现实世界中这种层次化结构俯拾皆是。例如,一幢高楼总是从最底层打基础开始,一层 一层地加高。又如,我国的行政组织具有街道、区、市、省、中央这样的层次化结构。

计算机软件的各个构件也经常组织成这样的层次体系结构。在层次体系中,下层构件为 上层构件提供服务,上层构件使用下层构件的服务,上层和下层之间形成一种类似“调用- 返回”的关系。为了正确地调用和返回,每一层都需要提供一个界面(接口)给上层,以便 与之交互。层次体系顶层为程序员或最终用户提供界面。

我们在自顶向下逐步求精设计方法中也使用了层次化的设计,只不过那里的层次体现的 是功能的分解,即一个函数用更加细化的函数来实现,上下层之间就是函数的调用-返回关 系。而在这里讨论的是用于不同目的的层次化体系结构,其中上下层之间并非功能分解的关 系,分层是为了建立不同的界面。打个比方,假设有一种多功能电视机,其面板上有许多功 能按钮,然而多数老年人既不明白也不需要使用那些先进的功能,复杂的面板只会让老人连 简单的频道和音量按钮也搞不清。这时我们可以在原面板上覆盖一层新面板,其上只留下频 道和音量按钮,现在老人看到的电视机就有了简单易用的界面(图 5.22)。

图 5.22 为电视机加一层面板

采用层次化设计的计算机软件的构件分成若干层,先有低层构件,然后在其上架设高层 构件。高层构件的功能依赖于低层构件的功能,但高层构件一般更容易理解,程序员或用户 使用起来更方便。典型的层次化软件体系结构的例子包括数据库的 ANSI-SPARC 三层模式、 网络技术的 ISO/OSI 七层模型、Web 应用开发中的三层体系结构等等。

层次化体系结构的主要优点包括重用和标准化。重用是指同样的构件可以用在任何具有 相同界面要求的地方;同样,只要层次间界面不变,一个构件也可以换用以不同方式实现的 其他同类构件。还以图 5.22 例打比方,我们自制的面板可以用于同品牌型号的所有电视机, 并且木质的面板可以换用塑料面板,黑色面板可以换用彩色面板,等等。标准化是指由标准 化组织为某一类软件构件定义标准界面,而各软件厂商可以采取不同的低层实现技术来实现 高层的标准界面。就好比家电协会规定所有电视机的面板都必须包括电源开关,而各厂商可 以用按钮来实现电源开关,也可以使用红外遥控来开关。

层次化体系结构的主要缺点是效率不如整体式结构,这是因为当程序员或用户面对顶层 构件请求某项服务时,这个请求需要从高层到低层逐层下传,最终由底层构件来实现功能, 再将结果逐层上传,直至顶层用户。这个逐层转换的过程显然很耗费时间。假如用户能直接 与底层打交道,功能的实现就会高效的多。