概述10种常见软件架构模式

备注

    本文译自https://towardsdatascience.com/10-common-software-architectural-patterns-in-a-nutshell-a0b47a1e9013?gi=f8addb915af7,做者Vijini MallawaarachchiSep 4, 2017shell

    为了更好的组织语言和理解,符合咱们的阅读习惯,原文的部分段落被合并或者分割。为体现完整性,不删减文字,保持原文文字内容。翻译纯属我的喜好、分享和收藏。数据库


正文

    是否想知道大型企业级系统是怎么设计的?在软件主体开发以前,咱们必须选择一个合适的架构来提供所需的功能和质量特征。因此在应用于设计以前,咱们应该了解不一样的架构。编程


什么是架构模式

    维基百科: 架构模式是在给定上下文的软件架构中,针对常发生问题的一种通用、复用的解决方案。架构模式相似于软件设计模式,可是范畴更广。

    本文中,我将简要的阐述以下10中常见架构模式的应用和优缺点。
    1. 分层模式
    2. 客户端-服务端模式
    3. 主从模式
    4. 管道-过滤器模式
    5. 代理模式
    6. 点对点模式
    7. 事件总线模式
    8. 模型-视图-控制器模式
    9. 黑板模式
    10. 解释器模式


1. 分层模式

    该模式用于构建可分解为多组子任务的程序,每一个子任务都在某个抽象层,每一个层对上一个更高层提供服务。通常信息系统中最多见的4层体系以下。
  • 表示层(也叫 UI 层)
  • 应用层(也叫服务层)
  • 业务逻辑层(也叫领域层)
  • 数据访问层(也叫持久层)
    应用场景
  • 通常桌面程序
  • 电子商务网页程序

2. 客户端-服务器模式

    该模式由两部分构成:单个服务器端和多个客户端。服务器组件对多个客户端组件提供服务。客户端向服务器端请求服务,服务端提供对应服务给这些客户端。此外,服务器端继续监听客户端请求。
    应用场景
  • 在线应用,好比电子邮件、文档分享和银行业务

3. 主从模式

    该模式由两部分构成:主节点和多个从节点。主节点组件向多个独立的从节点组件分派任务,并根据从节点返回结果计算出最终结果。
    应用场景
  • 数据库复制,主数据库被视为权威来源并同步到从数据库
  • 链接到计算系统的外围设备(主从驱动)



4. 管道-过滤器模式

    该模式用于构建生产和处理数据流的系统。每一个处理步骤封装在一个过滤器组件中。待处理的数据被传送到管道之中,这些管道可用于缓冲或者同步。
    应用场景
  • 编译器,接连的过滤器执行词义分析,语法分析,语义分析和代码生成
  • 生物资料学科的工做流


5. 代理模式

    该模式用于构建组件解耦的分布式系统。这些组件经过远程调用彼此交互。代理组件负责多个组件的通讯协调,服务器向代理公开他们的能力(服务和特性);客户端从代理中获取服务,而后代理重定向客户端到注册服务库中一个合适的服务。
    应用场景
  • 消息队列软件,好比 Apache ActiveMQ、Apache Kafka、RabbitMQ 和 JBoss Messaging

6. 点对点模式

    该模式中,各独立组件都叫对等点。对等点既能够做为客户端从其余对等点获取服务,也可做为服务端向其余对等点提供服务。对等点可做为客户端、或者服务端、或者二者,而且在不时间动态切换角色。
    应用场景
  • 文件分享网络,好比 GnutellaG2
  • 多媒体协议,好比 P2PTV 和 PDTP
  • 私媒体程序,好比 Spotify

7. 事件总线模式

    该模式主要处理事件,有4个主要组件:事件源,事件监听器,频道和事件总线。事件源发布消息到事件总线上的某个频道,监听器订阅某个频道,并得知在已订阅频道中发布的消息。
    应用场景
  • Android 开发
  • 通知服务

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

    该模式也叫 MVC 模式,划分交互程序为3个部分:模型——包含核心功能和数据,视图——显示信息给用户(多个视图可被定义),控制器——处理用户输入。它经过分割用户信息的内部陈述和呈现、接受方式来实现,解耦组件并容许高效的代码复用。

    应用场景设计模式

  • 主流编程语言的万维网程序架构
  • 网页框架,好比 Django 和 Rails

9. 黑板模式

    该模式对没有肯定性方案策略的问题颇有用。黑板模式由三个主要组件组成,黑板——包含解空间对象的结构化全局内存,知识源——有自拥表示的专门模块,控制组件——选择、配置和执行模块。全部组件均可访问黑板,可生成新的数据对象并添加到黑板中。在黑板中,可根据已有知识源的匹配规则,寻找某些类型的数据。
    应用场景
  • 语音识别
  • 车辆识别和跟踪
  • 蛋白质结构鉴定
  • 声呐信号解释

10. 解释器模式

    该模式用于设计解释特定语言编写的程序的组件。该组件主要指定怎么去评估程序代码行,也就是所谓的用某种语言写的语句或者表达式,基本点在于给语言符号分类。
    应用场景
  • 数据库查询语言,好比 SQL
  • 用于描述通讯协议的语言

架构模式比较

    下面的表格概述每一个架构模式的优缺点。
    但愿这篇文章对你有帮助,也很想听听大家的想法。谢谢阅读。^_^