I 五大风格总览

风格 1

数据流风格

数据驱动,前一步输出是后一步输入

数据像水一样流过管道

风格 2

调用/返回风格

控制流驱动,函数调用并返回

A 调用 B,B 返回结果

风格 3

独立构件风格

事件驱动,构件间松耦合

发布事件,谁关心谁处理

风格 4

虚拟机风格

抽象执行环境,解释执行

在虚拟环境里跑自定义逻辑

风格 5

仓库风格

以数据为中心,构件围绕共享数据协作

所有人围着一块黑板读写

II 各风格详解

1

数据流风格

子风格:批处理 / 管道-过滤器
数据 → 处理1 → 处理2 → ... → 处理N → 输出
优点
  • 松耦合(高内聚低耦合)
  • 良好的重用性 / 可维护性 / 可扩展性
  • 支持并行处理
  • 信息隐蔽性好
缺点
  • 交互性较差
  • 复杂性较高
  • 性能较差(每个过滤器都需解析和合成数据)

典型应用:传统编译器(词法→语法→语义→代码生成)、ETL 数据处理、网络报文处理、图像处理流水线

子风格区分:批处理 = 整批处理完再下一步,无交互;管道-过滤器 = 流式传输,弱交互

2

调用 / 返回风格

子风格:主程序/子程序 · 面向对象 · 分层结构
主函数 → 子函数 → 返回结果
优点
  • 良好的重用性(接口不变即可复用)
  • 可维护性好,控制流清晰
  • 可扩展性好,支持递增设计
缺点
  • 并非所有系统都适合分层
  • 难以找到合适的层次抽象方法
  • 层间耦合度高的系统难以实现

典型应用:传统单体应用、分层架构(表现层→业务层→持久层)、客户端-服务器架构

3

独立构件风格

子风格:进程通信 · 事件驱动(隐式调用)
事件源 → 发布事件 → 事件管理器 → 分发 → 事件处理器
优点
  • 松耦合(构件间不直接依赖)
  • 可扩展性强
  • 可复用性好
缺点
  • 控制流程难以预测
  • 调试困难
  • 数据一致性问题
  • 依赖上下文,难以推理

典型应用:事件驱动架构、微服务间通信、消息驱动系统

4

虚拟机风格

子风格:解释器 · 规则系统
输入 → 虚拟机(解释器) → 执行 → 输出
项目解释器规则系统
本质执行程序执行规则
数据来源输入程序规则库 + 数据
智能性较低较高
复杂度中等
核心组成 被解释程序、解释器引擎、状态存储、数据存储 规则集(知识库)、事实集、规则解释器、工作内存、选择机制
优点
  • 灵活应对自定义场景
  • 可动态修改业务逻辑无需重新部署
缺点
  • 复杂度较高
  • 性能相对较低

典型应用:编程语言解释器、DSL(领域特定语言)、规则引擎(如 Drools)、专家系统、决策支持系统、工作流引擎

5

仓库风格(以数据为中心)

子风格:数据库系统 · 黑板系统 · 超文本系统
构件围绕共享数据仓库进行读写,不直接通信
优点
  • 可扩展性强
  • 可复用性高
  • 适合复杂问题求解(黑板系统)
缺点
  • 控制复杂
  • 难以保证执行顺序
  • 开发困难

典型应用:数据共享系统、协同编辑系统、专家系统(黑板架构)、语音识别、图像处理、知识推理

III 五大风格横向对比

核心维度对比

维度数据流调用/返回独立构件虚拟机仓库
驱动方式数据驱动控制流驱动事件驱动规则/程序驱动数据共享驱动
耦合度松耦合较紧耦合松耦合中等中等
交互性中等中等中等
可扩展性
可维护性中等中等中等
控制流顺序明确难预测由规则决定难预测
调试难度中等
性能较差中等较差中等
并行支持中等

构件关系对比

风格构件关系通信方式
数据流前后顺序管道 / 数据流
调用 / 返回调用者 → 被调用者函数调用
独立构件无直接关系事件 / 消息
虚拟机解释器 → 被解释程序解释执行
仓库围绕共享数据读写共享存储

高频考点:独立构件 vs 调用/返回 必考

对比项独立构件风格调用返回风格
交互方式事件驱动函数调用
构件关系不直接交互直接调用
耦合性松耦合紧耦合
控制方式分散集中

IV 考试快速判断法

遇到架构风格识别题,按以下顺序依次判断:

1
看数据是否流动 → 数据流风格(批处理 / 管道-过滤器)
2
看是否函数调用 → 调用/返回风格(主子程序 / OO / 分层)
3
看构件是否独立运行、通过事件通信 → 独立构件风格(事件驱动)
4
看是否有解释层 / 规则引擎 → 虚拟机风格(解释器 / 规则系统)
5
看是否围绕共享数据 → 仓库风格(数据库 / 黑板 / 超文本)

V 记忆口诀

数 · 调 · 独 · 虚 · 仓

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

数据流
水管流水
调用返回
打电话(你问我答)
独立构件
广播电台(发信号,谁爱听谁听)
虚拟机
翻译官(中间层解释执行)
仓库
图书馆(大家围着书架读写)

VI 性能扩展方式

架构风格决定了系统的扩展方向扩展手段。考试中可能结合架构风格判断扩展方案的合理性。

风格扩展方式核心手段难度
数据流流水线并行 + 过滤器水平扩展各过滤器独立部署,多实例并行处理;管道各阶段可重叠执行较易
调用/返回分层独立扩展 + 负载均衡各层独立水平伸缩,负载均衡分发请求;增加服务器节点中等
独立构件事件处理器弹性伸缩构件独立部署;消息队列解耦,按事件量动态增减处理器实例容易
虚拟机优化解释引擎 + 引擎实例扩展解释器优化(JIT、缓存);规则引擎多实例分布式推理较难
仓库存储层扩展 + 计算节点扩展分布式存储、数据分片、读写分离、缓存;增加知识源节点中等
1

数据流 — 流水线并行 + 过滤器水平扩展

  • 每个过滤器是独立处理单元,可部署多个实例并行处理不同数据
  • 管道各阶段天然支持流水线并行(阶段1处理后立即交给阶段2,无需等整批完成)
  • 瓶颈通常在最慢的过滤器,针对瓶颈过滤器增加实例即可
2

调用/返回 — 分层独立扩展 + 负载均衡

  • 分层架构中每层可独立扩展(表示层、业务层、持久层各自水平伸缩)
  • 通过负载均衡器在多个服务实例间分发调用请求
  • 需注意层间接口的稳定性,扩展粒度受限于层次划分
3

独立构件 — 事件处理器弹性伸缩(最易扩展)

  • 构件间无直接依赖,仅通过事件/消息通信,扩展单个构件不影响其他构件
  • 消息队列天然支持消费组,可动态增减事件处理器实例
  • 微服务架构的基石,天然适合容器化弹性伸缩
4

虚拟机 — 解释引擎优化(扩展较难)

  • 主要靠优化解释器本身性能(字节码缓存、JIT 编译、热点分析)
  • 规则系统可分布式化:规则引擎多实例部署,共享规则库和事实库
  • 整体受限于解释执行的额外开销,性能不如原生编译
5

仓库 — 存储 + 计算双维度扩展

  • 存储层:分布式存储、数据分片(水平拆分)、主从复制、读写分离
  • 计算层:构件围绕共享数据独立运行,可增加计算节点并行处理
  • 黑板系统:增加知识源(KS)节点扩展求解能力;控制组件负责调度

性能扩展记忆口诀

流加管 · 调加服 · 独加件 · 虚优引 · 仓扩存
数据流
加管道/过滤器实例
调用返回
加服务实例
独立构件
加事件处理器
虚拟机
优化解释引擎
仓库
扩展存储 + 计算