【系统分析师】12.2 软件架构风格

🏛️ 一、概述:软件设计的"模式语言"

软件架构风格是描述特定软件系统组织方式的惯用模式,它定义了构件和连接件的类型以及一组如何组合它们的约束。架构风格反映了众多系统共有的结构和语义特性,是对软件设计经验的抽象和复用。

正如建筑学中有哥特式、巴洛克式、现代主义等风格,软件架构也有各种风格,每种风格适用于不同类型的系统,体现了不同的设计哲学和质量属性权衡。理解并掌握架构风格,能让你在面对新系统时,快速找到合适的"设计范式",避免从零发明。

架构风格的核心价值:

· 复用设计知识:借鉴成熟经验,避免重复犯错

· 提供设计词汇:便于团队沟通(如"我们采用微服务风格")

· 约束实现方式:指导后续设计和编码

· 预测质量属性:不同风格天然带有特定的质量特征

本节的知识框架:

· 架构风格的定义与作用

· 五大类架构风格及其子风格

· 风格选择的考量因素

🏗️ 二、详细讲解:五大类架构风格

根据经典分类方法,软件架构风格可分为五大类,每类包含若干具体风格:

1️⃣ 数据流风格

数据流风格以数据的处理流程为核心,系统由一系列处理单元(过滤器)组成,数据依次经过这些单元,每个单元对数据进行变换。

子风格 核心特点 优点 缺点 典型应用

批处理 数据以整体方式处理,步骤串行,每一步独立完成 简单、易于理解 交互性差、延迟高 传统批量作业、数据ETL

管道-过滤器 数据流式处理,每个过滤器有输入输出,通过管道连接 松耦合、高复用、支持并行 共享数据困难、性能开销大 Unix Shell、编译器、流处理

管道-过滤器详解:

· 过滤器:独立处理单元,对输入数据流进行变换、计算、过滤

· 管道:连接过滤器的数据通道,负责在过滤器间传递数据

· 特点:过滤器之间无状态,只依赖输入,独立性强

优点:

· 易于理解:符合人们的处理逻辑

· 可复用性:过滤器可独立替换、重用

· 可扩展性:增加新过滤器不影响现有部分

· 支持并行:可并行执行多个过滤器

缺点:

· 不适合交互式系统

· 过滤器间数据传输可能带来性能损失

· 每个过滤器需解析和生成数据,开销大

📌 速记口诀:"数据流风格分两派,批处理串行整体来,管道过滤器流式快,松耦合复用并行开"。

2️⃣ 调用/返回风格

调用/返回风格以控制流为核心,系统通过调用关系组织功能,构件之间通过过程调用或方法调用进行交互。

子风格 核心特点 优点 缺点 典型应用

主程序/子程序 单线程控制,主程序调用子程序,子程序返回后继续 简单、直接 难以扩展、不适合复杂系统 早期过程式语言程序

面向对象风格 数据与操作封装在对象中,对象间通过消息通信 易于理解现实世界、支持复用和扩展 对象间依赖需谨慎管理 绝大多数现代应用

层次结构 系统按抽象级别分层,每层为上层服务,调用下层 关注点分离、可替换性、依赖清晰 可能增加性能开销、层间划分困难 OSI网络模型、分层架构

层次结构(Layered Architecture)详解:

· 典型分层:表示层 → 业务层 → 持久层 → 数据层

· 调用规则:上层只能调用相邻下层,避免跨层调用

· 封闭式架构:每层仅对相邻层开放,是最严格的形式

· 开放式架构:允许某层直接调用非相邻层(需权衡)

优点:

· 关注点分离:每层职责清晰

· 可替换性:只要接口不变,可替换某层实现

· 标准化:定义清晰的层间接口,利于分工

缺点:

· 可能引入性能损耗(调用链长)

· 有时难以划分合适的层次

· 层级过多会增加复杂性

📌 速记口诀:"调用返回分三种,主程面向对象层;层次结构隔离好,上层只调下层门"。

3️⃣ 独立构件风格

独立构件风格强调构件之间的松散耦合,构件独立运行,通过某种机制进行通信和协调。

子风格 核心特点 优点 缺点 典型应用

进程通信 构件作为独立进程,通过IPC(管道、消息、Socket)通信 自然支持分布式、隔离性好 通信开销大、复杂性高 C/S架构、微服务

事件驱动(隐式调用) 构件不直接调用,而是发布事件或订阅事件,事件触发时执行 高度松耦合、可扩展性强 全局控制流不清晰、调试困难 GUI系统、消息中间件、EDA

事件驱动风格(Event-Driven Architecture,EDA)详解:

· 构件:事件生产者、事件消费者、事件通道(如消息队列)

· 工作机制:生产者发布事件到通道,消费者订阅感兴趣的事件,事件到达时被调用

· 特点:发布者不知道订阅者,实现极度解耦

优点:

· 高度可扩展:增加新消费者无需修改生产者

· 异步处理:提升系统响应性

· 适合分布式:天然支持异构系统集成

缺点:

· 全局控制流难以理解

· 可能出现事件风暴、循环依赖

· 调试和测试难度大

📌 速记口诀:"独立构件松耦合,进程通信消息传;事件驱动隐调用,发布订阅解耦完"。

4️⃣ 虚拟机风格

虚拟机风格旨在创建一种模拟环境,在该环境中可以执行自定义的程序或规则,实现灵活性和可移植性。

子风格 核心特点 优点 缺点 典型应用

解释器 解释执行自定义语言编写的程序,提供运行时灵活性 高度可定制、可移植 执行效率低 脚本引擎、Lisp解释器

规则系统 基于规则集和推理引擎,根据事实触发规则 适合复杂逻辑、易于修改规则 性能瓶颈、规则冲突管理难 专家系统、业务规则引擎

解释器风格:

· 组件:解释引擎、待解释程序、程序状态

· 工作方式:解释引擎循环读取指令,执行相应操作

· 典型场景:虚拟机(JVM)、脚本语言(Python)、正则表达式引擎

规则系统风格:

· 组件:规则库(条件-动作对)、工作内存(事实)、推理引擎

· 工作方式:引擎不断匹配规则条件,执行满足条件的规则动作,可能改变事实,触发新规则

· 典型场景:Drools规则引擎、决策支持系统

📌 速记口诀:"虚拟机风格有两类,解释器慢但灵活,规则系统逻辑强,专家决策它擅长"。

5️⃣ 仓库风格

仓库风格以共享数据为中心,构件围绕中央数据存储进行协作。

子风格 核心特点 优点 缺点 典型应用

数据库系统 以数据库为中心,多个应用共享数据 数据集中管理、一致性强 数据库可能成为瓶颈 大多数企业应用

黑板系统 共享数据(黑板)上多个知识源协作,通过黑板交换信息 适合不确定问题求解 控制复杂、难以验证 语音识别、AI规划系统

超文本系统 以超文本节点和链接组织信息,用户自由导航 非线性组织、易扩展 结构易松散、导航迷失 Web网站、Wiki

黑板系统详解:

· 组件:黑板(全局共享数据结构)、知识源(独立处理单元)、控制单元

· 工作方式:知识源监控黑板的变化,当有机会贡献时执行,结果更新黑板;控制单元协调知识源的选择

· 典型应用:语音识别(多个算法协作)、信号处理、协作式问题求解

📌 速记口诀:"仓库风格数据中,数据库系统最常用,黑板系统解难题,超文本链接自由行"。

6️⃣ 其他风格

除了上述五大类,还有一些常见的架构风格:

· C2风格(Component-Connector):基于构件和连接件的层次消息总线,构件之间通过消息总线异步通信,常用于GUI应用

· 正交架构:由组织层和线索层构成,将功能分解与分层结构正交组合

· 异构风格:实际系统往往是多种风格的组合,如分层+事件驱动+微服务

C2风格要点:

· 构件之间不直接连接,通过消息总线通信

· 构件只知道上层构件,不知道下层,保持独立性

· 消息分为向上请求和向下通知,实现松耦合

📝 三、重点总结与速记方法

✅ 核心重点

  1. 五大类架构风格:数据流、调用/返回、独立构件、虚拟机、仓库。必须能根据描述识别风格类别,并能说出各子风格名称和特点。

  2. 数据流风格:批处理、管道-过滤器。管道-过滤器的核心是"过滤器独立,管道连接",优点:松耦合、复用、并行;缺点:交互性差、性能开销。

  3. 调用/返回风格:主程序/子程序、面向对象、层次结构。层次结构要掌握"上层只能调用相邻下层"的规则和优缺点。

  4. 独立构件风格:进程通信、事件驱动(隐式调用)。事件驱动的核心是"发布-订阅",优点:松耦合、可扩展;缺点:控制流不清晰。

  5. 虚拟机风格:解释器、规则系统。解释器提供灵活性但效率低,规则系统适合复杂逻辑。

  6. 仓库风格:数据库系统、黑板系统、超文本系统。黑板系统的核心是"共享黑板+知识源+控制单元"。

  7. 风格选择依据:根据系统类型、质量属性要求、团队经验等因素综合权衡。

⚡ 速记口诀大全

1️⃣ 五大风格"五字诀"

"数、调、独、虚、仓"(数据流、调用/返回、独立构件、虚拟机、仓库)

2️⃣ 数据流"两子"口诀

"批处理整体算,管道过滤器流式干"

3️⃣ 调用返回"三子"口诀

"主程简单面向活,层次隔离调用锁"

4️⃣ 独立构件"两子"口诀

"进程通信远距离,事件驱动解耦妙"

5️⃣ 虚拟机"两子"口诀

"解释器灵活慢,规则系统逻辑繁"

6️⃣ 仓库"三子"口诀

"数据库系统共享库,黑板系统知识聚,超文本链接随意游"

7️⃣ 层次结构"隔层调用"口诀

"上层只能调下层,隔层调用不允许;封闭开放视情况,性能隔离需权衡"

8️⃣ 一句话总纲

软件架构风格 = (五大类 + 子风格 + 特点优缺点),是软件设计的"模式语言",选对风格,事半功倍。


掌握12.2节,意味着你拥有了丰富的架构设计"词汇",能够根据不同场景选择合适的风格。这是系统分析师进行架构设计的基础能力。

相关推荐
●VON2 小时前
旗舰基座大模型 MiMo-V2-Pro 初体验与实战指南
学习·小米·模型·von·mimo-v2-pro
QYQ_11272 小时前
嵌入式学习——ARM部分概念
arm开发·学习
苦瓜小生2 小时前
【黑马点评学习笔记 | 实战篇 】| 5-分布式锁+初步秒杀优化
笔记·分布式·学习
艾莉丝努力练剑2 小时前
System V IPC底层原理详解
linux·运维·服务器·网络·c++·人工智能·学习
PNP Robotics2 小时前
PNP机器人分享Frankal机器人等具身案例开发和实践
大数据·python·学习·机器人·开源
Dxy12393102162 小时前
HTML中图表学习:从基础到实战指南
前端·学习·html
电子云与长程纠缠2 小时前
Godot学习01 - HelloWorld
学习·游戏引擎·godot
Nan_Shu_6142 小时前
学习:Cesium (2)
学习
电子云与长程纠缠2 小时前
Godot学习02 - 输入
java·学习·godot