1.软件体系结构
软件体系结构可定义为:软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件体系结构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理,是构建于软件系统之上的系统级复用。
软件体系结构贯穿于软件研发的整个生命周期内,具有重要的影响。这主要以下三个方面来进行考察。
(1)利益相关人员之间的交流。软件体系结构是一种常见的系统抽象,代码级别的系统抽象仅仅可以成为程序员的交流工具,而包括程序员在内的绝大多数系统的利益相关人都借助软件体系结构来作为相互沟通的基础。
(2)系统设计的前期决策。软件体系结构是我们所开发的软件系统最早期设计决策的体现,而这些早期决策对软件系统的后续开发、部署和维护具有相当重要的影响。这也是能够对系统进行分析的最早时间点。
(3)可传递的系统级抽象。软件体系结构是关于系统构造以及系统各个元素工作机制的相对较小、却又能够突出反映问题的模型。由于软件系统具有的一些共通特性,这种模型可以在多个系统之间传递,特别是可以应用到具有质量属性和功能需求的系统中,并能够促进大规模软件的系统级复用。
2.分层式体系结构
分层式体系结构是一种最常见的架构设计方法,能有效地使设计简化,使设计的系统结构清晰,便于提高复用能力和产品维护能力。
层次式体系结构设计是将系统组成一个层次结构,每一层为上层服务,并作为下层客户。在一些层次系统中,除了一些精心挑选的输出函数外,内部的层接口只对相邻的层可见。连接件通过决定层间如何交互的协议来定义,拓扑约束包括对相邻层间交互的约束。由于每一层最多只影响两层,同时只要给相邻层提供相同的接口,允许每层用不同的方法实现,同样为软件重用提供了强大的支持。
软件层次式体系结构是最通用的架构,也被叫作N层架构模式(n-tier architecture pattern)。
这也是Java EE(也称为J2EE)应用经常采用的标准模式。这种架构模式非常适合传统的IT通信和组织结构,很自然地成为大部分与应用的第一架构选择。在分层次体系结构中组件被划分成几个层,每个层代表应用的一个功能,都有自己特定的角色和职能。分层架构本身没有规定要分层多少层,大部分的应用会分成表现层(或称为展示层)、中间层(或称为业务层)、数据访问层(或称为持久层)和数据层。其结构见图1所示。
图1 常用的层次式架构
分层架构的一个特性就是关注分离(seperation of concerns)。该层中的组件只负责本层的逻辑,组件的划分很容易明确组件的角色和职责,也比较容易开发、测试、管理和维护。
3.层次式体系结构的注意点
层次式体系结构是一个可靠的通用的架构,对很多应用来说,如果不确定哪种架构适合,可以用它作为一个初始架构。但是,设计时要注意以下两点:
(1)要注意的是污水池反模式。
所谓污水池反模式(architecture sinkhole anti-pattern),就是请求流简单地穿过几个层,每层里面基本没有做任何业务逻辑,或者做了很少的业务流程。比如一些JavaEE例子,业务逻辑层只是简单地调用了持久层的接口,本身没有什么业务逻辑。
每一层或多或少都有可能遇到这样的场景,关键是分析这样的请求百分比是多少。二八原则可以帮助你决定是否正在遇到污水池反模式。如果请求超过20%,则应该考虑让一些层变成开放的。
(2)需要考虑的是分层架构可能会让你的应用变得庞大。
即使你的表现层和中间层可以独立发布,但它的确会带来一些潜在的问题,比如:分布式复杂、健壮性下降、可靠性和性能的不足,以及代码规模的膨胀等。