软件架构的10个常见模式 #CSDN博文精选# #IT技术# #软件模式# #架构模式#

2023-11-07

大家好,小C将继续与你们见面,带来精选的CSDN博文~

又到周一啦,上周的系统化学习专栏已经结束,我们总共一起学习了20篇文章,这周将开启全新专栏《放假不停学,全栈工程师养成记》

在这里,你将收获:

  • 将系统化学习理论运用于实践,系统学习IT技术
  • 学习内容涵盖数据库、软件测试、主流框架、领域驱动设计和第三方生态等,离全栈工程师更近一步
  • 精心整理的CSDN技术大咖博文,假期学习实现弯道超车

新年快乐!春节过后的学习脚步可不能停下,小C今天推荐的是两篇关于“软件模式”的博文!

                                                                                   

本文转载自CSDN博主@evandeng2009

 

备注

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

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

 

正文

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

什么是架构模式

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

    本文中,我将简要的阐述如下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. 点对点模式

    该模式中,各独立组件都叫对等点。对等点既可以作为客户端从其他对等点获取服务,也可作为服务端向其他对等点提供服务。对等点可作为客户端、或者服务端、或者两者,并且在不时间动态切换角色。 

    应用场景

  • 文件分享网络,比如 Gnutella 和 G2
  • 多媒体协议,比如 P2PTV 和 PDTP
  • 私媒体程序,比如 Spotify

 

7. 事件总线模式

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

    应用场景

  • Android 开发
  • 通知服务

 

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

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

    应用场景

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

9. 黑板模式

    该模式对没有确定性方案策略的问题很有用。黑板模式由三个主要组件组成,黑板——包含解空间对象的结构化全局内存,知识源——有自拥表示的专门模块,控制组件——选择、配置和执行模块。所有组件都可访问黑板,可生成新的数据对象并添加到黑板中。在黑板中,可根据已有知识源的匹配规则,寻找某些类型的数据。 

    应用场景

  • 语音识别
  • 车辆识别和跟踪
  • 蛋白质结构鉴定
  • 声呐信号解释

 

10. 解释器模式

    该模式用于设计解释特定语言编写的程序的组件。该组件主要指定怎么去评估程序代码行,也就是所谓的用某种语言写的语句或者表达式,基本点在于给语言符号分类。 

    应用场景

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

 

架构模式比较

    下面的表格概述每个架构模式的优缺点。 

 

关注高校俱乐部,更多精彩内容等着你

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件架构的10个常见模式 #CSDN博文精选# #IT技术# #软件模式# #架构模式# 的相关文章

  • 什么是拷贝构造函数?拷贝构造函数何时被调用

    1 什么是拷贝构造函数 CA const CA C 就是我们自定义的拷贝构造函数 可见 拷贝构造函数是一种特殊的构造函数 函数的名称必须和类名称一致 它的唯一的一个参数是本类型的一个引用变量 该参数是const类型 不可变的 例如 类X的拷

随机推荐

  • python widget_python 图形界面

    Python自带的库是支持Tk的Tkinter 使用Tkinter 无需安装任何包 就可以直接使用 Tk是一个图形库 支持多个操作系统 导入Tkinter包的所有内容 from tkinter import 从Frame派生一个Applic
  • R与R Studio及R tools不冲突版本

    R与R Studio及R tools不冲突版本 R 3 6 3 R Studio 1 1 463 R tools 35 R 4 0 2 R Studio 1 3 1073 R tools 4 0 其他造成R Studio打开空白问题 1 路
  • Python+Requests+Unittest+Excel 接口自动化测试框架之Request模块01

    1 Requests模块 a Request模块是Python中可以实现模拟Http协议的模块 b 安装方式很多 可以用pip install requests 2 举例 import requests class Http Request
  • php://filter伪协议(总结)

    前言 这篇文章主要是关于php filter伪协议中的知识点总结 分析了常见的用法 文章目录 前言 php filter伪协议总结 php filter伪协议介绍 php filter伪协议使用方法 php filter过滤器分类 filt
  • CSDN-markdown编辑器

    这里写自定义目录标题 欢迎使用Markdown编辑器 新的改变 功能快捷键 合理的创建标题 有助于目录的生成 如何改变文本的样式 插入链接与图片 如何插入一段漂亮的代码片 生成一个适合你的列表 创建一个表格 设定内容居中 居左 居右 Sma
  • 大数据分析机器学习的数据清理和准备

    数据清理和准备是任何机器学习项目中至关重要的第一步 尽管我们经常认为数据科学家花费大量时间来修改算法和机器学习模型 但现实情况是大多数数据科学家花费大量时间来清理数据 在大数据分析机器学习的数据清理和准备中 我们将逐步介绍使用Python进
  • 管理神话之23:随便多少人你都能管

    原文作者 Johanna Rothman Cindy 我要给你的团队再加三个人 Patrick 公司的CTO 斜靠在门口 话音刚落 他转身就想离开 等等 这事我们要讨论一下 你不能这样扔下炸弹后就一走了之 你为什么要我再招更多的人 Cind
  • java并发篇面试

    文章目录 java并发篇 java如何开启线程 怎么保证线程安全 Volatile和Synchronized有什么区别 Volatile能不能保证线程安全 DCL Double check Lock 单例为什么要加Volatile JAVA
  • pycharm激活, pycharm远程调试

    pycharm professional 2017 2 3下载 百度盘公开地址 https pan baidu com s 1geDnVVX 1 pycharm激活 license server 1 激活窗口选择 Activate new
  • C++ Thread

    Thread 线程库 线程的创建 detach 句柄独立 线程资源转移 sleep for 全局函数线程化 joinable hardware concurrency 线程的互斥 原子操作定义 互斥锁 try lock recursive
  • Spring bean的生命周期

    对于普通的Java对象 当new的时候创建对象 当它没有任何引用的时候被垃圾回收机制回收 而由Spring IoC容器托管的对象 它们的生命周期完全由容器控制 bean的声明 bean的声明有好几种 如上图 上图声明的一些bean信息可以通
  • Hello Vulkan(五)

    上一期技术分享中 我们讲述了如何关于Vulkan的Data Buffers使用及VMA内存管理器使用 自己创建或使用VMA在显存里创建Buffers 并在CPU进行读取或写入 本期将继续分享关于Vulkan的技术 内容是非常有趣的部分 即
  • 算法:两个数组取中位数

    要求 任意两个数组取中位数 在保证空间复杂度的同时 时间复杂度要求log m n package com flash hance import java util ArrayList import java util List author
  • 计算机网络-概述

    计算机网络概述 概念 计算机网络就是互连的 自治的计算机集合 1 计算机网络概述 数据通信 资源共享 分布式处理 提高可靠性 负载均衡 2 计算机网络组成 硬件 软件 协议 1 按照工作方式分类 边缘部分 核心部分 边缘部分用户可以直接使用
  • USB HID 协议入门

    USB HID设备类的应用场合 USB HID类是USB设备的一个标准设备类 包括的设备非常多 HID类设备定义它属于人机交互操作的设备 用于控制计算机操作的一些方面 如USB鼠标 USB键盘 USB游戏操纵杆等 但HID设备类不一定要有人
  • 循环依赖-Autowired方式

    Autowired方式 例子 Component public class TestA Autowired private TestB testB Component public class TestB Autowired private
  • 乐高 斜面砖_使用LEGOⓇMicrogame创建您的第一个游戏,一砖一瓦

    乐高 斜面砖 New users can start creating in Unity faster than ever with the LEGO Microgame currently in beta our most recent
  • 计算机主机 滴滴响,电脑滴滴滴的响而且开不了机怎么办【解决方法】

    在平常生活中使用电脑的过程中 我们经常会遇到各种问题 比如开不了机就是很常见的 但是对于台式机来说 如果是硬件问题导致的开机故障的话 机箱是会进行一个声音的反馈并报警的 这就是我们非常熟悉的滴滴声 而且滴滴声音有不同的规律 这会反映出不同的
  • 如何用Python从数据库里面获取数据?4个步骤就能轻松实现

    数据存放在MySQL里面 在数据库里面查询发现有个字段的数据是JSON格式 不方便进行后续的操作 比方说 统计分析 特征提取等 所以想把这个字段里面的JSON格式数据进行解析 解析成功后 然后把以结构化表的形式存放到MySQL数据库 解决方
  • 软件架构的10个常见模式 #CSDN博文精选# #IT技术# #软件模式# #架构模式#

    大家好 小C将继续与你们见面 带来精选的CSDN博文 又到周一啦 上周的系统化学习专栏已经结束 我们总共一起学习了20篇文章 这周将开启全新专栏 放假不停学 全栈工程师养成记 在这里 你将收获 将系统化学习理论运用于实践 系统学习IT技术