所有前面的方法都有助于我们判断一个架构是否“足够好”—也就是说,是否有可能指导开发者和测试者构建一个系统,并满足系统的利益相关人的功能和质量关注点。在我们每天使用的系统中存在着许多好的架构。
但是,超越足够好的架构是怎样的呢?如果有一个“软件架构名人堂”,那会怎样?哪些架构会陈列在这个艺术馆的墙上?这个想法可能没有你想象的那么遥远—在软件产品线领域,这样的“名人堂”的确存在。(注1)进入“软件产品线名人堂”的条件包括获得商业上的成功、影响其他产品线的架构(其他产品线可能“借用、复制、窃取”这个架构)、拥有足够的文档从而让其他人“不必通过道听途说”就能够理解该架构。我们将为更一般的“架构名人堂”或“美丽架构艺术馆”的候选者设立怎样的条件呢?首先我们应该认识到,这是一个软件系统的艺术馆,而不是其他艺术馆,我们的系统构建的目的是为了使用。所以,我们也许从一开始就应该关注该架构的实用性:它应该每天被许多人使用。
但是,在使用架构之前,它必须先构建,所以我们应该关注该架构的可构建性。我们会寻找那些具有定义良好的使用结构的架构,它们支持增量式构建,这样,通过每次构建迭代我们都能得到一个有用的、可测试的系统。我们也会寻找那些具有定义良好的模块接口、本来就很好测试的架构,这样,构建的过程就是透明的、可见的。
接来下,我们想寻找那些展示了持久性的架构—也就是说,那些经过了时间考验的架构。我们生活在一个技术环境以从未有过的加速度变化的年代。美丽的架构应该预期到
变更的需要,允许期望的修改能够容易而有效地进行。我们想寻找那些避免了“衰老地平线”(Klein 2005)的架构,超过了这条“衰老地平线”,维护将变得代价极大,以至于不可能进行。
最后,我们还想寻找这样一些架构,它们的特征让使用、构建、测试这些架构的开发人员和测试人员,以及由它而形成的系统的用户感到由衷的高兴。为什么开发人员会高兴?因为它让他们的工作变得容易,而且更有可能得到一个高品质的系统。为什么测试人员会高兴?作为测试过程的一部分,他们必须尝试模拟用户的行为。如果他们高兴,可能用户也会感到高兴。如果厨师对他的烹调的菜品感到不高兴,那么品尝这些菜品的顾客也可能会感到不高兴。
不同的系统和应用领域为这些架构提供了许多机会,展示它们特有的令人高兴的特征,但概念完整性是一项跨越所有领域的特征,并且总是让人感到高兴。一致的架构学习起来更容易、更快,当知道了一点之后,你就可以开始预测其余的部分。不需要记住并处理特殊的情况,代码更干净,测试集更小。一致的架构不会为做同一件事情提供两种(或更多)方法,不会让用户浪费时间进行选择。正如Ludwig Mies van der Rohe所说的,好的设计,“少即是多”。爱因斯坦可能会说,美丽的架构就是尽可能简单,但不要过于简单。
有了这些判别条件,我们推荐第一批进入“美丽架构艺术馆”的候选者。
第一个是A-7E舰载飞行处理器(Onboard Flight Processor,OFP)的架构,它由海军研究实验室(Naval Research Laboratory,NRL)在20世纪70年代后期开发,在(Bass、Clements和Kazman 2003)有介绍。尽管这个系统从未实现量产,但它满足了所有其他的判别条件。这个架构对软件架构的实践曾经产生了巨大的影响,它展示在真实世界的系统中,将设计时的信息隐藏模块和使用结构与运行时的进程结构分离。因为美国政府资助并开发了这个架构,所以所有项目文档都提供给了公共领域。(注2)这个架构具有定义良好的使用结构,促进了系统的增量式构建。最后,信息隐藏模块结构为分解系统提供了清晰一致的准则,实现
了很强的概念完整性。作为嵌入式系统软件架构的榜样,A-7E OFP当然属于我们的艺术馆。
我们想放入艺术馆的另一个架构是朗讯5ESS电话交换机的软件架构(Carney等1985)。5ESS取得了全球范围的商业成功,为世界各国的网络提供了核心电话网络交换。它成为性能和可靠性的标准,每个单元每小时能处理超过100万次的连接,平均每年非计划宕机时间少于10秒钟(Alcatel-Lucent 1999)。该架构的一些统一概念,如管理电话连接的“半通话模型”,已经成为电话和网络协议领域的标准模式(Hanmer 2001)。除了保持必须处理的通话类型的数目为2n(其中n是通话协议的数目)之外,半通话模式还在操作系统的进程概念和电话的通话类型概念之间建立起了联系,从而提供了简单的设计原则,引入了漂亮的架构一致性。在过去的25年中,开发团队涉及多达3000个人,他们发展并增强该系统。基于它的商业成功、持久性和影响,5ESS架构是我们艺术馆的一件好藏品。
还有一个我们想放入美丽架构艺术馆的系统,它就是万维网(World Wide Web,WWW)的架构。它由Tim Berners-Lee在CERN创建,在(Bass、Clements和Kazman 2003)中有介绍。万维网当然已经取得了商业上的成功,它转变了人们使用因特网的方式。即使创建了新的应用、引入了新的功能,它的架构仍然保持不变。该架构的整体简单性促成了它的概念完整性,但有一些决定导致了该架构的完整性保持不变,如客户端和服务器端使用同一个库,创建分层架构以实现分离关注点等。核心万维网架构的持久性和它对新扩展、新功能持续支持的能力,使它当之无愧地进入了我们的艺术馆。