第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 架构

  • 结构:表示层(客户机)+ 功能层(应用服务器)+ 数据层(数据库服务器)
  • 四大优点
    1. 各层逻辑独立,提高可维护性和可扩展性
    2. 灵活选用平台和硬件,良好可升级性和开放性
    3. 各层可并行开发,选择各自适合的开发语言
    4. 功能层隔离表示层与数据层,安全管理基础扎实
  • 关键:各层之间的通信效率(通信方法、频度、数据量)

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 个维度对比:

  1. 交互方式:构件间如何通信
  2. 数据构造:数据如何组织
  3. 控制构造:执行流程如何控制
  4. 扩展措施:如何扩展新功能

题型三:架构风格选择理由

答题框架

  1. 系统核心需求是什么
  2. 该风格如何满足核心需求
  3. 该风格的其他优势(复用性、灵活性等)

论文素材

  • 可写主题:分层架构设计与应用、MVC 在项目中的应用
  • 项目场景:电商系统(表现层+业务层+数据层)、管理系统(B/S+C/S混合)
  • 论述要点:分层原则、关注分离、MVP/MVVM 演进、性能优化