ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

分篇二:架构风格与架构模式

分篇二:架构风格与架构模式

一、基本概念

1. 什么是架构风格

架构风格描述的是一类系统的结构组织方式。它定义了:

  • 一组构件类型(如过滤器、层、服务)
  • 构件之间的连接方式(如管道、调用、事件)
  • 构件如何组合为系统
  • 对构件交互的约束

简单说:架构风格 = 构件 + 连接件 + 约束。

2. 架构风格 vs 架构模式 vs 设计模式

概念粒度关注点举例
架构风格系统级系统的整体组织方式与家族特征分层、管道-过滤器、客户端-服务器
架构模式系统/子系统级解决系统级重复出现的结构问题MVC、微内核、Broker
设计模式类/对象级解决代码级重复出现的设计问题单例、工厂、观察者、策略

考试中"架构风格"与"架构模式"经常互换使用,答题时不必纠结概念边界。


二、五大架构风格分类

教材将架构风格分为五大类,每类下有具体的子风格。

总览表

大类子风格关键词
数据流风格批处理序列、管道-过滤器数据驱动、流水线
调用/返回风格主程序/子程序、面向对象、分层层次、调用链
独立构件风格进程通信、事件驱动(隐式调用)松耦合、事件、消息
虚拟机风格解释器、基于规则的系统灵活、可编程
仓库风格数据库系统、黑板系统、超文本系统共享数据、知识源

三、每种架构风格详解

1. 数据流风格

1.1 批处理序列

定义:数据按照一系列固定顺序的处理步骤依次传递,每个步骤处理完全部数据后,再将结果交给下一步。

结构:步骤1 -> 步骤2 -> 步骤3 -> … -> 最终结果

特点:

  • 每个步骤是独立的程序
  • 步骤之间通过文件或数据集传递数据
  • 前一步必须全部完成后,下一步才能开始

适用场景:传统 ETL、数据报表、离线数据处理

优点:逻辑清晰、各步骤独立、便于管理

缺点:无法实时处理、延迟高、交互性差

1.2 管道-过滤器(Pipes and Filters)

定义:每个处理步骤称为"过滤器",数据通过"管道"在过滤器之间流动。与批处理不同,过滤器可以增量式处理数据(不必等前一步全部完成)。

结构:数据源 -> |过滤器A| -> |过滤器B| -> |过滤器C| -> 数据汇

特点:

  • 过滤器之间互相独立,只通过管道通信
  • 过滤器不知道上游和下游是谁
  • 支持并行处理
  • 便于复用与组合

适用场景:编译器(词法->语法->语义->代码生成)、Unix Shell 管道、数据清洗流水线

优点:

  • 高内聚低耦合
  • 易于理解、维护和复用
  • 支持并行与流水线处理
  • 易于添加新的过滤器

缺点:

  • 不适合需要共享大量状态的交互式系统
  • 过滤器之间的数据格式转换可能成为负担
  • 错误处理困难

考试高频对比:管道-过滤器 vs 分层

维度管道-过滤器分层
数据流向线性数据流层间调用/返回
交互方式数据驱动接口调用
构件关系各过滤器独立上层依赖下层
适用场景数据处理流水线企业应用、Web 系统

2. 调用/返回风格

2.1 主程序/子程序

定义:系统由一个主程序和若干子程序组成,主程序通过调用子程序来完成功能,子程序可以继续调用更底层的子程序。

特点:层次分解、自顶向下、顺序执行

适用场景:结构化程序设计

优点:结构清晰、易于理解

缺点:灵活性差、扩展不便

2.2 面向对象

定义:系统由一组对象构成,每个对象封装了数据和操作,对象之间通过消息/方法调用交互。

特点:封装、继承、多态

适用场景:大部分现代软件系统

优点:高复用、易扩展、便于维护

缺点:对象间调用链可能复杂、性能开销

2.3 分层架构(Layers)

定义:将系统划分为若干层次,每层只能调用相邻下层的服务,层与层之间通过接口通信。

典型结构:

表示层(UI) ↓ 业务逻辑层 ↓ 数据访问层 ↓ 数据库

特点:

  • 每层职责单一
  • 层间通过接口隔离
  • 严格分层:只能调用直接下层
  • 松散分层:允许跨层调用

适用场景:企业级应用、Web 系统、操作系统

优点:

  • 职责清晰、关注点分离
  • 易于维护和测试
  • 支持并行开发(不同团队负责不同层)
  • 层间可替换

缺点:

  • 严格分层可能影响性能(每次请求要穿越所有层)
  • 层间接口变更可能引发连锁修改
  • 不适合高性能实时系统

3. 独立构件风格

3.1 进程通信

定义:系统由多个独立运行的进程构成,进程之间通过消息传递通信。

特点:进程独立运行、通过消息交换数据

适用场景:分布式系统、微服务间通信

3.2 事件驱动 / 隐式调用

定义:构件不直接调用彼此,而是通过发布事件来触发其他构件的响应。一个构件发布事件,系统自动将事件传递给所有注册了该事件的构件。

特点:

  • 发布者不知道谁会处理事件
  • 接收者不知道事件从哪里来
  • 松耦合

适用场景:GUI 系统、消息中间件、EDA(事件驱动架构)

优点:

  • 极高的松耦合
  • 易于添加新的事件处理者
  • 支持动态注册与注销

缺点:

  • 控制流难以追踪和理解
  • 事件处理顺序不确定
  • 调试困难
  • 性能难以预测

考试高频关联:发布-订阅模式属于事件驱动的典型实现。


4. 虚拟机风格

4.1 解释器

定义:系统内嵌一个"虚拟机",能够解释执行自定义语言或规则。

结构:解释引擎 + 被解释的程序/规则 + 程序/规则的内部表示 + 解释引擎当前状态

适用场景:脚本引擎、规则引擎、DSL(领域特定语言)

优点:极高的灵活性,可以动态修改规则

缺点:性能较差(解释执行比编译执行慢)

4.2 基于规则的系统

定义:是解释器的一种特化,系统行为由一组规则驱动,规则引擎根据当前数据匹配规则并执行。

适用场景:专家系统、业务规则引擎、风控系统


5. 仓库风格

5.1 数据库系统

定义:以共享数据库为核心,多个构件通过读写数据库来交互。

特点:数据集中存储、构件通过数据库协作

适用场景:传统信息管理系统、ERP

5.2 黑板系统(Blackboard)

定义:由三部分组成:黑板(共享数据区域)、知识源(独立的专家模块)、控制器(协调知识源)。多个知识源观察黑板上的数据变化,当条件满足时主动贡献自己的结果。

结构:

知识源A ──┐ 知识源B ──┼── 黑板(共享数据)←── 控制器 知识源C ──┘

适用场景:语音识别、图像识别、自然语言理解等 AI 问题求解

优点:

  • 支持多种不同的知识表示和推理方法
  • 易于添加新的知识源
  • 适合无确定性算法的复杂问题

缺点:

  • 控制逻辑复杂
  • 调试与测试困难
  • 不保证解的质量

考试高频对比:黑板 vs 数据库

维度黑板系统数据库系统
触发方式知识源主动观察黑板应用主动查询数据库
交互模式数据驱动 + 控制器协调请求-响应
适用领域AI、信号处理企业信息系统
5.3 超文本系统

定义:以网状结构组织信息,节点之间通过超链接连接。

适用场景:Web 系统、在线文档


四、其他高频架构模式

除了五大风格下的子风格,以下架构模式也是案例题高频考点。

1. MVC(Model-View-Controller)

定义:将系统分为三个部分:

  • Model(模型):业务数据与逻辑
  • View(视图):用户界面展示
  • Controller(控制器):处理用户输入、协调 Model 与 View

交互关系:用户操作 -> Controller -> 更新 Model -> 通知 View -> 展示给用户

优点:

  • 职责分离,便于并行开发
  • View 可替换、Model 可复用
  • 易于测试(Model 可独立测试)

缺点:

  • 增加了系统复杂度
  • View 与 Model 之间可能存在紧耦合
  • 小型项目过度设计

2. MVP 与 MVVM

模式Presenter / ViewModel 的职责View 的特点
MVCController 转发请求View 直接读取 Model
MVPPresenter 完全中介View 被动,只通过接口与 Presenter 交互
MVVMViewModel 通过数据绑定同步View 与 ViewModel 双向绑定

3. 微内核(Microkernel)

定义:系统分为最小化的核心和可插拔的插件/扩展。核心只提供最基本的功能,所有扩展功能以插件形式加载。

适用场景:操作系统、IDE、可插拔平台

优点:极高的可扩展性、核心稳定

缺点:插件间协调复杂、核心接口设计难度高

4. SOA(面向服务架构)

定义:将系统功能封装为标准化的服务,服务之间通过**企业服务总线(ESB)**或标准协议通信,实现松耦合与复用。

三大角色:服务提供者、服务消费者、服务注册中心

核心思想:服务注册 -> 服务发现 -> 服务调用

优点:

  • 松耦合、标准化接口
  • 服务可复用
  • 支持异构系统集成

缺点:

  • ESB 可能成为单点瓶颈
  • 服务粒度难以把控
  • 治理与运维复杂

5. 微服务架构

定义:将单体应用拆分为一组小型服务,每个服务运行在独立进程中,围绕业务能力构建,通过轻量级通信机制(通常为 HTTP/JSON)协作,可独立部署。

与 SOA 的对比:

维度SOA微服务
服务粒度较粗较细
通信方式ESB(重量级)HTTP/REST/gRPC(轻量级)
数据管理共享数据库每个服务独立数据库
治理方式集中治理分散治理
部署方式整体部署独立部署

微服务优点:

  1. 化解复杂度,便于理解与维护
  2. 独立开发,技术选型自由
  3. 独立部署,加快发布节奏
  4. 独立扩展,资源利用精细

微服务挑战:

  1. 分布式系统复杂度(网络、一致性)
  2. 部署与运维成本高
  3. 接口治理与版本管理
  4. 数据一致性难保证

6. C/S 与 B/S

维度C/SB/S
客户端需安装专用客户端浏览器即可
升级维护需要更新客户端只需更新服务端
性能客户端可承担部分计算服务端压力较大
适用场景专业软件、游戏Web 应用、信息系统

五、架构风格选型思路

案例题给出业务场景让你选架构时,可以从以下维度判断:

判断依据适合的风格
数据需要经过多步顺序处理管道-过滤器
系统分为展示、业务、数据三层分层
需要高度松耦合、异步通信事件驱动 / 发布-订阅
AI 类问题、多种不确定推理策略黑板
规则频繁变化、需要动态执行解释器 / 规则引擎
需要插件化扩展微内核
多团队独立开发、独立部署微服务
异构系统集成、标准化接口SOA
Web 前端交互复杂MVC / MVVM

六、答题模板

概念定义题

[风格名称]是一种[描述构件类型]的架构风格,构件之间通过[连接方式]交互。适用于[场景类型]系统。

优缺点题

优点:1. … 2. … 3. …
缺点:1. … 2. … 3. …
适用场景:…

对比题

按以下维度逐条对比:定义、结构、通信方式、优点、缺点、适用场景。

选型题

该场景适合采用[风格名称]。因为[从业务特征出发],该风格在[质量属性]方面具有优势。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进