软件架构风格
案例分析每年必考第 1 题的核心,通常 5~10 分名词解释 + 风格选择
⭐ 必背:5 大类架构风格分类
架构风格(Architectural Style)是描述某一特定应用领域中 系统组织方式 的惯用模式 —— 定义了一组构件、连接件、约束、组合规则。
Garlan 和 Shaw 将主流风格分为 5 大类:
「数据流、调用返回、独立构件、虚拟机、仓库」
背诵口诀:数调独立虚拟仓库 → "数调独虚仓"
一、5 大类风格速记表
| 大类 | 子风格 | 核心特征 | 典型应用 |
|---|---|---|---|
| 数据流 | 批处理 | 整批数据顺序流转 | 编译器、统计 |
| 管道-过滤器 | 流式数据 + 增量处理 | Unix Shell、ETL、编译器 | |
| 调用/返回 | 主程序-子程序 | 过程式分解 | 结构化程序 |
| 面向对象 | 对象封装 + 消息 | OO 系统 | |
| 层次结构 | 每层只调用相邻下层 | OSI、操作系统、TCP/IP | |
| 独立构件 | 进程通信 | 构件间显式通信 | 分布式系统 |
| 事件驱动 / 隐式调用 | 构件订阅事件,松耦合 | GUI、消息总线、EDA | |
| 虚拟机 | 解释器 | 解释虚拟指令 | JVM、SQL 引擎、脚本 |
| 基于规则的系统 | 规则库 + 推理机 | 专家系统、AI | |
| 仓库 | 数据库系统 | 中央数据 + 多构件访问 | OLTP 系统 |
| 超文本系统 | 节点 + 链接 | Web、Wiki | |
| 黑板系统 | 知识源 + 黑板 + 控制 | 语音识别、AI、模式识别 |
记忆口诀:数(批·管)→ 调(主·OO·层)→ 独(进·事)→ 虚(解·规)→ 仓(库·文·黑)
二、必考子风格详解
1. 管道-过滤器(Pipe-Filter)
构件过滤器(Filter)
连接件管道(Pipe)
特点数据流单向流动;过滤器独立,无状态;支持并行
优点
- 组件可独立开发和复用
- 支持并发执行,提高吞吐
- 易于增量扩展、易理解
缺点
- 不适合交互式系统
- 难处理错误恢复
- 数据传输有性能开销(解析/封装)
典型例子
编译器 4 阶段(词法→语法→语义→代码)、Unix Shell 管道
cat a | grep x | wc -l、ETL、CI/CD 流水线。2. 客户端/服务器(C/S)与浏览器/服务器(B/S)
| 对比项 | C/S 两层 | 三层 C/S | B/S |
|---|---|---|---|
| 构成 | 客户端 + 数据库 | 表现 + 应用 + 数据 | 浏览器 + Web + DB |
| 客户端 | 胖客户端 | 瘦/胖 | 极瘦 (浏览器) |
| 升级维护 | 每台都要装 | 仅升级中间层 | 仅升级服务器 |
| 跨平台 | 差 | 较好 | 极好 |
| 性能/响应 | 最好 | 较好 | 受网络影响大 |
| 典型场景 | 桌面 ERP | 大型 OA | 互联网网站 |
3. MVC / MVP / MVVM
MVCModel-View-Controller:控制器中转;视图与模型可直接通信
MVPModel-View-Presenter:Presenter 处理所有逻辑,View 与 Model 隔离
MVVMModel-View-ViewModel:双向数据绑定,前端框架 Vue/Angular 常用
案例分析常问点
"为何使用 MVC?" → 答 关注点分离、视图可替换、有利于团队分工、提高可维护性和可测试性。
4. 事件驱动 / 隐式调用(EDA)
机制构件发布事件 → 总线分发 → 订阅者响应
优点松耦合、可扩展、动态接入
缺点控制流难追踪、事件顺序不可控、调试困难
典型GUI、消息总线、Reactive、Node.js
5. 黑板架构(Blackboard)
三大要素知识源(KS)+ 黑板(共享数据)+ 控制器
特点不确定知识、近似解、协同求解
应用语音识别、图像识别、专家系统、AI 推理
判断口诀:"不确定 + 协作 + 模式识别" → 黑板架构
6. 解释器(Interpreter)
组成解释引擎 + 被解释程序 + 状态 + 控制状态
应用JVM、CLR、SQL 引擎、规则引擎、DSL
优点灵活性高、可动态修改;性能差
7. 富互联网应用(RIA)
定义把桌面应用体验搬到浏览器:富交互 + 异步通信 + 数据缓存
关键技术AJAX、SPA、本地存储、WebSocket、Flex/Silverlight(已过时)
8. 面向服务架构(SOA)
特点服务是基本单元 + 松耦合 + 标准化接口 + 通过 ESB 集成
关键技术Web Service(SOAP+WSDL+UDDI)、ESB、BPEL、SCA、REST
SOA vs 微服务(论文常考对比)
SOA: 粗粒度服务、ESB 总线集中编排、技术栈受限、企业级整合
微服务: 细粒度、去中心化、每个服务独立部署/技术栈、用 API Gateway + 服务注册中心
三、案例分析答题模板
题型 1:给一个系统场景,选择合适的架构风格
四步答题法:
- 识别关键词:抓住"数据流""松耦合""模式识别""不确定""分布式""跨平台"等词。
- 选定风格:用第一节表格映射(关键词 → 风格)。
- 说明特征:答出构件、连接件、关键约束。
- 结合题目论证:把题中需求映射到风格优点上,得分点!
关键词 → 风格速查
- 流式数据 + 增量处理 → 管道-过滤器
- 跨平台 + 浏览器 → B/S
- 松耦合 + 可扩展 → 事件驱动 / EDA
- 不确定 + 协作 + AI → 黑板
- 规则多变 + 易扩展 → 解释器 / 基于规则
- 视图多 + 可维护 → MVC / 分层
- 服务复用 + 跨企业集成 → SOA
- 独立部署 + 弹性伸缩 → 微服务
题型 2:比较两种架构风格的优缺点
三维度比较法(背):
维度 1耦合性 / 复用性
维度 2性能 / 可扩展性
维度 3可维护性 / 开发难度 / 部署成本
每个维度写 1~2 句对比,字数撑起来,得分点稳。
题型 3:为何采用某风格 / 风格改造
答题套路:
- 原系统的缺陷(对应不满足某质量属性,如可扩展性差)
- 新风格的核心特征(2~3 点)
- 新风格如何对应解决缺陷(扣回题目)
- 可能引入的新问题(性能、复杂度等,体现思考深度)
四、必背口诀总览
五大类口诀:数调独虚仓
数据流:批·管
调用返回:主·OO·层
独立构件:进·事
虚拟机:解·规
仓库:库·文·黑
风格选型口诀:
流式数据走管道 · 跨平台用 B/S
松耦合靠事件驱动 · 模糊推理选黑板
规则多变用解释器 · 视图多用 MVC
企业集成上 SOA · 弹性伸缩拆微服务
✅ 自测 3 连
1. 编译器属于哪种架构风格?为什么?
2. 一个语音识别系统适合用什么风格?核心三要素是什么?
3. SOA 与微服务的本质区别在哪 3 点?
答案:1) 管道-过滤器,数据流单向 + 增量处理 + 阶段独立。 2) 黑板,知识源 + 黑板 + 控制器。 3) 粒度、集成方式(ESB vs 网关)、技术栈选择。
📕 必考章节 1/3 · 架构风格 完