一文读尽十种常见软件架构模式

大家是否思考过如何设计大型企业级系统?在进行主要的软件开发之前,我们先得选择一个合适的架构。这个架构要给我们所需的功能和质量保证。因此,在将这些架构用于我们的设计之前,我们应该理解不同的架构体系。

1. 什么是架构模式

根据 Wikipedia 解释,

一个架构模式就是,在给定上下文条件下,解决软件架构中常见问题的一个通用、可复用的解决方案。架构模式类似于软件设计模式,但范围更广。

在这篇文章中,我将简单介绍以下十种常见的架构模式的用法,及其优缺点。

  • 分层模式
  • 客户端-服务器模式
  • 主从模式
  • 管道-过滤器模式
  • Broker 模式
  • 点对点模式
  • 事件总线模式
  • 模型-视图-控制器模式
  • 黑板模式
  • 解释器模式

2. 分层模式

这种模式用于构建能被拆分为一组子任务的程序,每个子任务是一个特殊的抽象层。每层向更高一层提供服务。

下面是通用信息系统中,最常见的 4 层:

  • 表示层(也称 UI 层)
  • 应用层(也称服务层)
  • 业务逻辑层(也称领域层)
  • 数据层(也称持久化层)

用法:

  • 常见的桌面应用
  • 电子商务 Web 应用

3. 客户端-服务器模式

这种模式由两部分组成,一个服务端和多个客户端。服务端组件将给多个客户端组件提供服务。客户端从服务端请求服务,服务端提供相关的服务给这些客户端。此外,服务端会持续监听客户端的请求。

用法:

  • 在线应用,例如,电子邮件、共享文档和银行业务

4. 主从模式

这种模式由两部分组成,master 和 slaves 。master 组件分发任务给同等的 slave 组件,获取 slave 返回的结果之后,计算最终的结果。

用法:

  • 在数据库复制中,master 数据库作为权威数据库,slave 数据库从其同步
  • 在计算机系统中,连接到总线的外围设备(主、从驱动器)

5. 管道-过滤器模式

这种模式用于构建生产和处理数据流的系统。每个处理步骤都包含一个过滤器组件。需要被处理的数据才能够通过管道。这些管道能起到缓存或同步的作用。

用法:

  • 编译器。一系列的过滤器完成词法分析、解析、语义分析和代码生成
  • 生物信息学的工作流

6. Broker 模式

这种模式用于构建具有解耦组件的分布式系统。这些组件通过远程调用进行通信。 Broker 组件负责协调其他组件的通信。

服务将其功能(服务地址和特征)发布到 Broker 。客户端向 Broker 请求一个服务时,Broker 查询注册表,将客户端的请求重定向到合适的服务地址。

用法:

  • 消息中间件,例如,Apache ActiveMQ、Apache Kafka、RabbitMQ 和 JBoss Messaging

7. 点对点模式

在这种模式下,各个组件被称为对等端。对等端既可以作为客户端,向其他对等端请求服务,也可以作为服务端向其他对等端提供服务。对等端可以充当客户端或服务端,亦或同时都是,而且可以随时改变其角色。

用法:

  • 文件共享网络,例如,Gnutella 和 G2
  • 多媒体协议,例如,P2PTV 和 PDTP

8. 事件总线模式

这种模式主要处理事件,具有 4 个主要的组件,事件源,事件监听者,通道,事件总线。事件源将消息发布到事件总线上特定的通道。事件监听者订阅特定的通道。当有消息进入通道时,之前订阅过相关通道的监听者将会收到消息通知。

用法:

  • Android 开发
  • 通知服务

8. 模型-视图-控制器模式

这种模式也被称为 MVC 模式,将一个交互式应用分为 3 个部分:

  1. 模型 - 包含核心功能和数据
  2. 试图 - 向用户展示信息(可能定义了多个视图)
  3. 控制器 - 处理用户的输入

这样做是为了将程序内部的信息与展示给用户的信息,以用户能接受的方式分开。从而解耦组件,并且可以提高代码的复用率。

用法:

  • 使用主流编程语言的互联网应用架构
  • Web 框架,例如,Django 和 Rails

10. 黑板模式

这种模式对于没有确定性解决方案的问题很有用。黑板模式主要由 3 部分组成:

  • 黑板 - 一个结构化的全局内存,包含来自解决方案空间的对象
  • 知识源 - 具有自己表现形式的特殊模块
  • 控制组件 - 选择、配置和执行模块

所有的组件都可以访问黑板。组件可以生成新的数据对象添加到黑板。组件可以在黑板上查看特定类型的数据,也可以使用现有知识源通过模式匹配查找数据。

用途:

  • 语音识别
  • 车辆识别和追踪
  • 蛋白质结构识别
  • 破译声呐信号

11. 解释器模式

这种模式用于设计一个解释专用语言编写的程序的组件。它主要指定如何计算每一行程序,也就是用特定语言编写的句子或表达式。其基本思想是语言的每个符号都有一个类。

用法:

  • 数据库查询语言,例如 SQL
  • 描述通信协议的语言

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章