有没有想过如何设计大型企业及系统?在开发之前,我们必须要选择一个合适的架构,以保证我们软件的功能和质量。今天就简单介绍一下常用的 10 个架构。
什么是架构?
一直以来,在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。甚至于很多架构师一说架构,就开始谈论什么应用架构、硬件架构、数据架构等等。我曾经也到处寻找过架构的定义,请教过很多人,结果发现,没有大家都认可的定义。套用一句关于 big data 流行的笑话,放在架构上也适用:
Architecture is like teenage sex,everybody talks about it,nobody really knows what is it。
事实上,架构在软件发明时的 N 多年以前,就已经存在了,这个词最早是跟随着建筑出现的。在软件工程中,架构以理解为:
- 根据要解决的问题,对目标系统的边界进行界定。
- 并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。
- 并对这些切分出来的部分,设立沟通机制。
- 根据 3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。
(上面关于什么是架构摘自 InfoQ,资深架构师王概凯 Kevin 的专栏)
这篇文章将简述常见的 10 种架构模式的概念、用法以及其优缺点。
- 分层模式 (Layered pattern)
- 客户端/服务器模式 (Client-server pattern)
- 主/从模式 (Master-slave pattern)
- 管道/过滤器模式 (Pipe-filter pattern)
- 代理模式 (Broker pattern)
- 对等模式 (Peer-to-peer pattern)
- 事件总线模式 (Event-bus pattern)
- 模型/视图/控制器 (MVC) 模式 (Model-view-controller pattern)
- 黑板模式 (Blackboard pattern)
- 解析器模式 (Interpreter pattern)
1. 分层模式 (Layered pattern)
分层模式用于对结构化设计的软件进行层次拆解,每个层次为独立的抽象,为其上层抽象提供服务。
系统通常被拆分为以下四个层次:
- 表示层(也称为 UI 层)
- 应用层(也称为服务层)
- 业务逻辑层(也称为领域层)
- 数据访问层(也称为持久化层)
使用场景
- 通用桌面应用程序
- 电子商务 Web 应用
2. 客户端/服务器模式 (Client-server pattern)
客户端/服务器模式由两个部分构成:一个服务器与多个客户端。服务器组件同时为多个客户端组件提供服务。客户端向服务器发启服务请求,服务器将相应服务信息回应给客户端。此外,服务器持续监听来自客户端的请求。
使用场景
- 电子邮件、文件共享及银行业务等在线应用
3. 主/从模式 (Master-slave pattern)
主/从模式由两个部分构成:主设备与从设备。主服务组件将作业分发给多个从设备组件,并根据这些从设备反馈的结果,计算生成最终结果。
使用场景
- 数据库复制,主数据库被认定为权威数据源,各从数据库与主数据保持同步
- 在计算机系统中通过总线互连的各设备(包括主设备与从设备)
4. 管道/过滤器模式 (Pipe-filter pattern)
管道/过滤器模式用于构造用于生成及处理数据流的系统。每个处理过程都封装在过滤器(filter)
组件之中,要处理的数据通过 管道(pips)
进行投递。管道同时用于作为 过滤器(filter)
间的缓冲及同步。
使用场景
- 编译器,一系列的过滤器用于词法分析、语法分析、语义分析及代码生成
- 生物信息学的工作流
5. 代理模式(Broker pattern)
代理模式用于在结构化系统中对组件解耦。系统内各组件间采用远过程调用(remote service invocations)的方式交互。代理(Broker)组件充当组件间通讯的协调角色。
提供服务的组件将其能力(服务以及特性)发布给代理,客户端均向代理请求服务,由代理将请求重定向到先前已发布过对应服务的组件进行处理。
使用场景
6. 对等模式 (Peer-to-peer pattern)
对等模式中的组件称之为对等体(peer),对等体既作为向其他对等体请求服务的客户端,同时也做为响应其他对等体请求的服务端。对等体可以在运行过程中动态地改变其角色,即,既可以单独做为客户端或服务端运行,又可同时作为客户端与服务端运行。
使用场景
7. 事件总线模式(Event-bus pattern)
事件总线模式应用于事件处理,主要由四个组件构成:事件源(event source),事件侦听者(event listener),通道(Channel)以及总线(event bus)。 事件源将消息发布到总线的特定通道,侦听者订阅相应的通道,事件源所发布的消息经通道通告给订阅通道的侦听者。
使用场景
- Android 开发
- 通告(Notification)服务
8. 模型/视图/控制器 (MVC) 模式(Model-view-controller pattern)
模型/视图/控制器模式(简称 MVC 模式)将交互式应用程序拆分为三个部分:
- 模型(model) – 包含核心功能及数据
- 视图(view) – 呈现信息给用户(通过有多个视图)
- 控制器(controller) – 处理用户的输入操作
MVC 模式通过将内部信息表示、用户信息呈现以及用户操作接收分开的方式解耦组件,实现高效代码重用。
使用场景
9. 黑板模式(Blackboard pattern)
黑板模式适用于 无预知确定解决策略
的问题,主要由三个组件构成:
- 黑板(blackboard) – 用于存储解空间对象的结构化全局内存
- 知识(knowledge)源 – 能自表意的专用模块
- 控制(control)组件 – 选择、配置与执行的模块
所有的组件均能访问黑板,组件可将新生成的数据对象写入黑板,也可以通过模式匹配从黑板中获取知识源所生成的特定数据。
使用场景
- 语音识别
- 车辆识别和追踪
- 蛋白质的结构鉴定
- 声纳信号解析
10. 解析器模式(Interpreter pattern)
解析器模式用于设计语言的解析程序,主要用于指定评估程序代码行,即解析出特定语言的语句与表达式,其核心思想是为语言的每个符号定义相应的类。
使用场景
- SQL 等数据库查询语言
- 通讯协议描述语言
上述架构模式的对比
下表格总结了各架构模式的优缺点
英文原文:10 Common Software Architectural Patterns in a nutshell
中文:10 个常用的软件架构模式
本文有增改