软件架构风格
- 软件架构风格是系统的高层级组织模式,定义了组件、连接件及组合约束。掌握主要架构风格及其适用场景,能帮你更好地进行系统设计。下面用表格概括五大类经典架构风格及其典型应用场景,方便你快速了解:
| 架构风格 | 核心特点 | 典型应用场景举例 |
|---|---|---|
| 数据流风格 | 数据驱动,依次处理 | 编译器、日志批量处理、Unix Shell管道 |
| 调用/返回风格 | 模块间显式调用,分层协作 | 传统企业应用、Web应用(MVC)、操作系统 |
| 独立构件风格 | 组件松散耦合,通过事件/消息通信 | GUI应用、微服务系统、物联网传感器网络 |
| 虚拟机风格 | 提供自定义执行环境,解释或规则驱动 | 编程语言解释器(Python)、专家系统/规则引擎、游戏脚本引擎 |
| 以数据为中心风格 | 围绕中央数据仓库,组件通过共享数据交互 | 数据库系统、集成开发环境(IDE)、语音识别(黑板系统) |
🧠 详解五大架构风格
1. 数据流风格(Data Flow Styles)
数据像在管道中流动,依次经过各个处理单元。
- 批处理序列(Batch Sequential):
- 特点:数据整体传输,每一步处理都是一个独立的程序,只有前一步彻底完成后,下一步才能开始。
- 场景:适用于离线、非实时的大规模数据处理任务。
- 举例:银行每日结束时进行的当日交易对账和报表生成;大型日志文件的分析和统计。
- 管道-过滤器(Pipes and Filters):
- 特点:数据以流形式连续处理,每个过滤器独立且逐步处理数据。
- 场景:适用于流式数据处理或需要清晰分离处理步骤的场景。
- 举例:编译器(词法分析 → 语法分析 → 语义分析 → 代码生成);Unix/Linux Shell中的命令管道(如 ps -ef | grep python)。
2. 调用/返回风格(Call/Return Styles)
通过显式调用机制组织系统,是最常见的风格之一。
- 主程序/子程序(Main/Subroutine):
- 特点:单线程控制,主程序调用子程序,形成树形调用结构。
- 场景:适合流程明确、结构相对简单的应用。
- 举例:科学计算程序;早期的结构化程序。
- 面向对象(Object-Oriented):
- 特点:将数据和操作封装在对象中,通过方法调用交互。
- 场景:适合业务模型复杂,需要模拟现实世界实体的系统。
- 举例:图形用户界面(GUI)应用(按钮、窗口等都是对象);Java Spring框架管理的企业应用。
- 分层架构(Layered):
- 特点:系统分为若干层,每层为上层提供服务,并使用下层的服务(如表现层 → 业务逻辑层 → 数据访问层)。
- 场景:适用于大型企业级应用,追求职责分离、易于维护和技术异构。
- 举例:网络协议栈(如TCP/IP);典型的Web应用程序(浏览器/Web服务器/数据库三层)。
- 客户端-服务器(Client-Server) & 浏览器-服务器(Browser-Server):
- 特点:C/S架构需安装专用客户端,部分计算在客户端完成;B/S架构客户端是浏览器,计算主要在服务器端。
- 场景:C/S用于需要丰富交互或高性能的应用;B/S用于广泛分发、易维护的Web应用。
- 举例:C/S: QQ、大型网络游戏、企业ERP系统;B/S: 各类网站、Web邮箱、在线办公系统。
3. 独立构件风格(Independent Components)
组件是独立的,通过异步消息或事件进行协作,耦合度低。
- 事件系统(Event Systems)/隐式调用:
- 特点:组件发布事件,其他组件订阅并响应,发布者不知谁会响应。
- 场景:适用于交互式系统或需要高度解耦的场景。
- 举例:图形用户界面(GUI)(点击按钮触发事件);IDE中的语法检查(代码修改触发检查事件)。
- 进程通信(Communicating Processes):
- 特点:构件是独立进程,通过消息传递(如网络Socket、消息队列)进行通信。
- 场景:适用于分布式系统和高并发应用。
- 举例:微服务架构(服务间通过网络API或消息调用);Apache Kafka等消息中间件处理的异步系统。
4. 虚拟机风格(Virtual Machine Styles)
通过构建一个虚拟环境来解释执行或基于规则运行,提供灵活性和跨平台能力。
- 解释器(Interpreter):
- 特点:解释执行自定义指令或脚本。
- 场景:需要跨平台执行或用户可定制行为的场景。
- 举例:编程语言解释器(如Python解释器);游戏脚本引擎(自定义角色行为)。
- 基于规则的系统(Rule-based Systems):
- 特点:依据预定义的规则集对输入数据进行匹配和推理。
- 场景:适用于专家系统、决策支持和业务规则频繁变化的场景。
- 举例:金融欺诈检测(根据交易规则判断);医疗诊断支持系统。
5. 以数据为中心风格(Data-Centered Styles)
围绕一个共享的数据仓库进行组织,组件通过访问和修改中心数据源间接交互。
- 仓库(Repository):
- 特点:中心数据结构(如数据库)代表系统当前状态,独立构件在数据上执行。
- 场景:数据密集型应用,多个组件需要共享和操作相同数据。
- 举例:数据库管理系统(DBMS) 本身;集成开发环境(IDE)(中心数据结构存储代码模型,各工具操作它)。
- 黑板系统(Blackboard):
- 特点:多个知识源独立对共享的“黑板”数据进行读写和推理,控制器协调推理步骤。
- 场景:解决非结构化、无确定性算法的复杂问题(如模式识别、人工智能)。
- 举例:语音识别系统(不同知识源处理声音信号、语法、语义等);医疗诊断系统。
💡 如何选择合适的架构风格
选择时通常需综合考虑:
- 系统需求:功能性需求,以及性能、安全性、可扩展性、可维护性、可靠性等非功能性需求。
- 业务特点:业务逻辑的复杂性、变化频率、数据模型等。
- 团队与技术:团队的技术储备、经验和偏好,现有的技术基础设施。
- 约束条件:项目预算、时间、部署环境等外部约束。
混合使用是常见做法。例如,一个微服务系统(独立构件风格)中,每个微服务内部可能采用分层架构(调用/返回风格),服务间通过消息队列(管道-过滤器的一种变体或进程通信)进行通信,并使用数据库(以数据为中心风格)持久化数据。

7194

被折叠的 条评论
为什么被折叠?



