关注「有鱼软考」,系统架构设计师备考干货持续更新。第13章是综合知识+案例的高频章,建议先吃透"分层"这个总纲,再逐层突破表现层、中间层、数据访问层。
一、本节一句话
层次式体系结构 = 分层结构(每层为上层服务、作下层客户)+ 关注分离(各层只管本层逻辑)+ N 层架构模式(最通用、可作不确定时的初始架构)
二、知识框架
- ▪▪ ▪ • 软件体系结构:定义四要素(元素 / 相互作用 / 集成模式 / 约束)/ 三大价值(利益方交流 · 设计前期决策 · 可传递系统级抽象)
- ▪▪ ▪ • 分层思想:层次结构、相邻层可见、连接件与协议、N 层模式、关注分离、典型四层
- ▪▪ ▪ • 设计注意:污水池反模式(二八原则判定)/ 应用膨胀风险
三、核心内容
软件体系结构的定义与价值
定义四要素
- ▪▪ ▪ • 软件体系结构为软件系统提供 结构、行为和属性的高级抽象 ,由四部分构成:构成系统的元素描述、这些元素的相互作用、指导元素集成的模式、这些模式的约束。
- ▪▪ ▪ • 它不仅指定系统的组织结构和拓扑结构,还显示系统需求与构成系统的元素之间的对应关系,并提供设计决策的基本原理,是构建于软件系统之上的 系统级复用 。
贯穿生命周期的三大价值
- ▪▪ ▪ 1. 利益相关人员之间的交流 :体系结构是一种常见的系统抽象;代码级抽象只是程序员的交流工具,而包括程序员在内的绝大多数利益相关人员都借助体系结构作为相互沟通的基础。
- ▪▪ ▪ 2. 系统设计的前期决策 :它体现所开发软件系统最早期的决策,对后续开发、部署、维护影响重大,也是能够对系统进行分析的 最早时间点 。
- ▪▪ ▪ 3. 可传递的系统级抽象 :它是关于系统构造及元素工作机制的、相对较小却突出反映问题的模型;由于软件系统有共通特性,这种模型可在多个系统间传递,特别适用于具有相似质量属性和功能需求的系统,促进大规模软件的系统级复用。
分层式体系结构思想
- ▪▪ ▪ • 核心思想 :将系统组成层次结构, 每一层为上层服务,并作为下层客户 。
- ▪▪ ▪ • 层接口可见性 :在一些层次系统中,除精心挑选的输出函数外,内部的层接口只对相邻层可见。
- ▪▪ ▪ • 连接件与协议 :连接件通过决定层间如何交互的协议来定义;拓扑约束包括对相邻层间交互的约束。
- ▪▪ ▪ • 复用优势 :每一层最多只影响两层;只要给相邻层提供相同接口,就允许每层用不同方法实现——这同样为软件重用提供强大支持。
N 层架构模式与典型分层
- ▪▪ ▪ • 别名与定位 :层次式体系结构最通用,也叫 N 层架构模式(n-tier architecture pattern) ,也是 Java EE(J2EE)应用常采用的标准模式;它适合传统 IT 通信和组织结构,很自然地成为大部分应用的第一架构选择。
- ▪▪ ▪ • 典型四层 :架构本身不规定层数,大部分应用分为 表现层(展示层)、中间层(业务层)、数据访问层(持久层)、数据层 (见图 13-1)。
- ▪▪ ▪ • 层数弹性 :小应用有时把业务层和持久层合在一起;更大规模应用可能划分更多层,如增加调用外部服务的层。
关注分离
- ▪▪ ▪ • 分层架构的核心特性是 关注分离(separation of concerns) :该层中的组件只负责本层逻辑,组件划分容易明确角色和职责,也比较容易开发、测试、管理和维护。
请求流向(自上而下)
- ▪▪ ▪ • 请求(Request)从 表现层 进入,经 中间层 、 访问层 到 数据层 ,每层由若干组件构成,层间"封闭"交互,请求不跨层直穿。
设计注意(两点)
污水池反模式
- ▪▪ ▪ • 含义 :污水池反模式(architecture sinkhole anti-pattern)指请求流简单地穿过几个层,每层里面基本没做或只做很少业务逻辑。例如某些 Java EE 例子中,业务逻辑层只是简单调用持久层接口,本身并无业务逻辑。
- ▪▪ ▪ • 判定方法 :每一层都可能遇到,关键看这类请求的百分比。用 二八原则 判断——若请求超过 20% 如此,应考虑让一些层变成"开放"的(允许跨层)。
应用膨胀风险
- ▪▪ ▪ • 即使表现层和中间层可以独立发布,分层也会带来潜在问题:分布模式复杂、健壮性下降、可靠性和性能不足、代码规模膨胀等。
四、关键概念速查表
五、易错·易混
六、章节速记
- ▪▪ ▪ • 三句话回顾 :①架构是系统结构/行为/属性的高级抽象,含四要素、贯穿全周期。②分层每层服务上层、作下层客户,典型四层。③注意污水池反模式(超 20% 则开放层)与应用膨胀。
- ▪▪ ▪ • 记忆口诀 :相邻可见、关注分离、二八开放、防膨胀。
- ▪▪ ▪ • 关键词链 :架构抽象(元素/相互作用/模式/约束)→ 三大价值 → 分层 → N 层 → 关注分离 → 污水池 → 庞大
- ▪▪ ▪ • 自测三问 :①软件体系结构由什么组成?②污水池反模式怎么处理?③分层典型分哪几层?
- ▪▪ ▪ • 答案 :①元素 + 相互作用 + 集成模式 + 约束;②超 20% 请求则开放层;③表现层 / 中间层 / 数据访问层 / 数据层。
如果本文帮你理清了"分层"的总纲,欢迎点赞、收藏、关注「有鱼软考」,下一节我们拆解表现层的 MVC / MVP / MVVM 三兄弟。
