第13章 层次式架构设计
核心知识点
1. 层次式架构概述
- 核心思想:将系统组成层次结构,每层为上层服务,并作为下层客户
- 连接件:通过决定层间如何交互的协议来定义
- 拓扑约束:对相邻层间交互的约束
- 特点:
- 每层最多只影响相邻两层
- 允许每层用不同方法实现(只要接口一致)
- 支持软件复用
2. 常见分层(四层)
表现层(展示层)→ 中间层(业务层)→ 数据访问层(持久层)→ 数据层
- 表现层:MVC 模式,负责用户交互和数据显示
- 中间层:业务逻辑处理
- 访问层:数据持久化操作
- 数据层:数据库、文件系统等
3. MVC 架构模式
- Model(模型):业务数据和业务逻辑,一个模型能为多个视图提供数据
- View(视图):用户看到并与之交互的界面,接收用户输入但不做业务处理
- Controller(控制器):处理用户交互,解释视图输入,调用模型,选择视图反馈
- 关键特点:强制分离输入、处理、输出流程
- MVP 模式:Model-View-Presenter,Presenter 完全接管 View 和 Model 交互
- MVVM 模式:Model-View-ViewModel,双向数据绑定
4. 两层 C/S 架构
- 结构:客户端 + 服务器
- 缺点(已不常用):
- 开发成本高、客户端程序设计复杂
- 用户界面风格不一、软件移植困难
- 软件维护和升级困难、安全性问题
- 服务器端压力大、难以复用
5. 三层 C/S 架构
- 结构:表示层(客户机)+ 功能层(应用服务器)+ 数据层(数据库服务器)
- 四大优点:
- 各层逻辑独立,提高可维护性和可扩展性
- 灵活选用平台和硬件,良好可升级性和开放性
- 各层可并行开发,选择各自适合的开发语言
- 功能层隔离表示层与数据层,安全管理基础扎实
- 关键:各层之间的通信效率(通信方法、频度、数据量)
6. 三层 B/S 架构
- 本质:三层 C/S 的变种,客户端变为浏览器,应用服务器变为 Web 服务器
- 特点:0 客户端架构
- 缺点:
- 缺乏对动态页面的支持
- 安全性难以控制
- 响应速度远低于 C/S
- 数据提交以页面为单位,不利于 OLTP 应用
7. 混合架构风格
- 内外有别模型:企业内部用 C/S,外部人员用 B/S
- 查改有别模型:查询用 B/S,修改用 C/S
- 缺点:实现困难,成本高
8. RIA(富互联网应用)
- 本质:还是 0 客户端,借助于高速网速实现插件本地缓存
- 优点:结合 C/S 反应快、交互性强 + B/S 传播广、易传播
- 典型:小程序
9. 污水池反模式(Architecture Sinkhole Anti-pattern)
- 定义:请求流简单穿过各层,每层基本没做业务逻辑
- 判断标准:二八原则——如果超过 20% 的请求穿过而不处理,则遇到此反模式
- 对策:让一些层变成"开放"的
10. 软件架构风格分类(必背)
| 大类 | 风格 | 特征 | |------|------|------| | 数据流风格 | 批处理序列、管道-过滤器 | 数据从一端流向另一端 | | 调用/返回风格 | 主程序/子程序、面向对象、层次结构 | 显式调用关系 | | 独立构件风格 | 进程通信、事件驱动(隐式调用) | 异步/事件触发 | | 虚拟机风格 | 解释器、基于规则的系统 | 自定义规则/仿真执行 | | 仓库风格 | 数据库系统、黑板系统、超文本系统 | 中央数据中心 | | C2 风格 | 通过连接件绑定的并行构件 | 构件/连接件有顶/底 |
11. 各架构风格对比(考试核心)
| 维度 | 管道-过滤器 | 数据仓库 | 解释器 | 事件驱动 | |------|-----------|---------|--------|---------| | 交互方式 | 顺序,前输出→后输入 | 星型,与共享数据交互 | 用户提交规则→引擎执行 | 触发/广播事件 | | 数据结构 | 数据流 | 数据库结构 | 规则/代码 | 事件消息 | | 控制结构 | 数据驱动 | 应用驱动 | 规则驱动 | 事件驱动 | | 性能 | 较好 | 依赖数据库 | 较差 | 较好 | | 扩展 | 增减过滤器 | 增加数据/模型 | 增加规则 | 增加监听器 |
真题考点映射
| 年份 | 考点 | 分值 | |------|------|------| | 2024上 | 质量属性识别(12分)+ 解释器风格(6+7分) | 25 | | 2024下 | 质量属性识别(10分)+ 管道-过滤器 vs 数据仓库对比(7分)+ 架构图(8分) | 25 | | 2025上 | 质量属性识别(12分)+ 解释器风格(6+7分) | 25 | | 2025下 | 质量属性识别(10分)+ 微服务架构(8+7分) | 25 |
易错点/陷阱
- 管道-过滤器 vs 批处理:批处理前后构件不一定关联,管道-过滤器是增量传递
- 引入对象管理层降低性能(不是提高),类似增加层次
- 三层 B/S 不支持动态页面,需要 RIA 弥补
- C2 风格构件有顶/底,不能直接连接,必须通过连接件
- IDE 通常采用数据仓库(以数据为中心)架构,中心数据是语法树
- 闭环控制适合嵌入式系统(连续动作与状态)
案例分析模板
题型一:质量属性识别(每年必考!)
答题方法: 逐条分析需求,识别对应的质量属性:
- 时间相关(秒/分钟)→ 性能
- 错误/故障相关 → 可用性
- 权限/加密/隐私 → 安全性
- 适配/配置/界面 → 易用性
- 扩展/模块化/部署 → 可修改性
- 多语言/文档 → 易用性
- 日志/定位故障 → 可用性(可维护性)
题型二:架构风格对比
答题框架: 从 4 个维度对比:
- 交互方式:构件间如何通信
- 数据构造:数据如何组织
- 控制构造:执行流程如何控制
- 扩展措施:如何扩展新功能
题型三:架构风格选择理由
答题框架:
- 系统核心需求是什么
- 该风格如何满足核心需求
- 该风格的其他优势(复用性、灵活性等)
论文素材
- 可写主题:分层架构设计与应用、MVC 在项目中的应用
- 项目场景:电商系统(表现层+业务层+数据层)、管理系统(B/S+C/S混合)
- 论述要点:分层原则、关注分离、MVP/MVVM 演进、性能优化