高架学习笔记之软件架构风格

目录

零、什么是软件架构风格

一、常见的软件架构风格

二、数据流风格

2.1. 批处理风格

2.2. 管道-过滤器风格

三、调用/返回风格

3.1. 主/子程序风格

3.2. 面向对象风格

3.3. 层次型风格

3.4. 客户端/服务器风格

3.4.1. 两层C/S体系结构

3.4.2. 三层C/S体系结构

3.4.3. B/S体系结构

四、数据共享风格

4.1. 仓库风格

4.2. 黑板风格

4.3. 超文本风格

五、虚拟机风格

5.1. 解释器风格

5.2. 规则系统风格

六、独立构件风格

6.1. 进程通信风格

6.2. 事件系统风格

七、其他风格

7.1. 闭环-过程控制风格

7.2. C2风格


零、什么是软件架构风格

    软件架构设计的一个核心目标就是达到架构级的软件重用。在不同的软件系统中使用同一个架构模式,可以减少大量设计成本,使用重复的、经过验证过的成熟的架构模式也可以降低风险,避免了从头设计一套架构模式可能会产生的种种问题。

    将众多系统共有的结构和语义特性归纳起来,用于指导系统如何将各个模块和子系统有效地组织成一个完整的系统,就产生了不同的软件架构风格。简单来讲,软件架构风格就是描述某一特定应用领域中系统组织方式的惯用模式。有了软件架构风格,还可以减少系统人员之间的沟通成本,提高沟通效率,比如某人只要将系统描述为“客户/服务器”模式,而不用详细解释系统的设计细节,其他人也会立即明白系统是如何组织和工作的。

一、常见的软件架构风格

    目前,常见的软件架构风格大致可以分为6类:

    下面章节对这些软件架构风格进行详细地说明。

二、数据流风格

    数据流软件架构风格的核心思想是将软件系统中的组件视为数据处理单元,数据在这些处理单元之间流动并被处理,这种架构风格强调数据的流动和转换。在数据流软件架构中,软件系统被划分为多个独立的处理单元,每个处理单元负责特定的数据处理任务。这些处理单元可以是函数、过滤器、模块或者服务,它们按照一定的顺序连接在一起,形成数据流管道。数据从一个处理单元经过处理后,传递给下一个处理单元,直至最终完成整个数据处理流程。数据流架构风格适用于需要处理大量数据或实现复杂数据处理逻辑的软件系统。数据流架构风格具有以下优点:

1.模块化:系统被分解为多个独立的处理单元,易于维护和扩展。

2.可重用性:每个处理单元可以被重复利用在不同的数据流中。

3.灵活性:可以根据需求动态组合不同的处理单元,实现灵活的数据处理流程。

4.可伸缩性:可以通过增加或替换处理单元来实现系统的水平扩展。

    常见的数据流软件架构风格包括批处理架构风格和管道-过滤器架构风格。

2.1. 批处理风格

    在批处理风格的软件架构中,数据按照一定的顺序经过一系列数据处理单元,每一步必须在前一步处理完成后才能开始。在批处理架构风格中,数据在整个处理过程中必须保持其完整性,即每个步骤处理完成后都以整体的方式向后传递数据。

2.2. 管道-过滤器风格

    数据通过一系列管道流动,每个管道上都连接有一个或多个过滤器,用于处理数据。每个过滤器都只关注特定的数据处理任务(分析、计算、转换等),通过串联不同的过滤器可以实现复杂的数据处理逻辑。在管道-过滤器风格的架构中,不要求数据在处理过程中的完整性,每个管道只需要将处理结果向后传递即可。

三、调用/返回风格

    调用/返回软件架构的核心思想是将一个复杂的大系统分解为若干子系统,它主要强调在系统组件间的调用和返回机制。在这种架构风格中,一个组件(通常被称为服务)接收到调用者的请求后执行任务并产生一个结果,这个结果再返回给调用者。

    调用/返回架构风格的主要优点是能够将复杂的系统分解为更小、更易于管理的部分,从而降低系统的复杂度并提高其可修改性。每个组件都可以独立开发和测试。这促进了模块化编程,使得跟踪和调试变得更加容易。

3.1. 主/子程序风格

    主/子程序软件架构风格一般采用单线程控制,把问题划分为若干处理步骤,构件即为主程序和子程序。其中主程序负责控制程序的整体流程和逻辑,而子程序则负责执行特定的任务或功能。主程序通常包含程序的入口,并调用适当的子程序来完成具体的工作。调用关系具有层次性,其主程序的正确性取决于它调用的子程序的正确性。这种风格可以使程序结构清晰,易于理解和维护。

3.2. 面向对象风格

    面向对象软件架构风格强调数据(属性)和行为(方法)的封装、继承和多态。在面向对象架构中,系统被视为一组相互作用的对象集合,每个对象代表了现实世界中的实体或概念。这种架构风格有助于降低系统的复杂性,提高代码的可重用性和可维护性。

3.3. 层次型风格

    层次型软件架构风格是一种将软件系统划分为多个层次的架构模式,每个层次都负责不同的功能或业务逻辑,并通过定义好的接口与上下层进行交互。这种架构风格的特点包括:

  1. 层次划分:系统被组织成多个层次,每个层次都有明确的职责和功能。通常,上层依赖于下层提供的服务,但下层不依赖于上层。这种层次结构有助于降低系统的复杂性,并简化了开发和维护过程。

  2. 清晰的责任划分:每个层次都负责特定的功能或业务逻辑,这使得每个层次的责任清晰明确。这种划分有助于提高代码的可读性和可维护性。

  3. 松耦合:层次之间的交互通过定义好的接口进行,这有助于实现层次之间的松耦合。松耦合意味着一个层次的变化不会对其他层次产生过多的影响,从而提高了系统的可维护性和可扩展性。

  4. 易于扩展:由于层次之间的接口清晰,新功能的添加或现有功能的修改通常只需要在特定的层次上进行,而不需要对整个系统进行大规模改动。

  5. 资源利用效率高:层次型架构通常能够实现资源的有效利用,因为不同层次的资源可以根据需要进行独立的优化和管理。

3.4. 客户端/服务器风格

    客户端/服务器(C/S)软件架构风格是一种分布式计算架构,它将软件系统分为两个主要部分:客户端(Client)和服务器(Server)。这种架构风格的核心特点是客户端和服务器之间的高度分工合作,并通过网络通信进行交互,以实现系统的整体功能。

3.4.1. 两层C/S体系结构

    在两层C/S体系结构中,后台服务器一般仅负责数据管理,而将其余的功能及交互全部放在前台客户机中实现,可以称之为“胖客户机,瘦服务器”。

3.4.2. 三层C/S体系结构

    在三层C/S体系结构中,增加了一个应用服务器,将功能层独立放到应用服务器上,前台客户机仅保留最基本的表示层,即“瘦客户机”。总的来说,三层C/S体系结构包括:1)表示层:应用的用户接口部分,通常使用图形用户界面;2)功能层:应用的主体,实现具体的业务处理逻辑;3)数据层:即数据库管理系统。

3.4.3. B/S体系结构

    浏览器/服务器(B/S)体系结构严格来说并不属于传统的C/S体系结构,通常只视为C/S体系结构的一种变体,在传统的三层C/S架构中,通常包含客户端、应用服务器和数据库服务器三个层级,而B/S架构则将客户端和应用服务器合并为一个层级,通过浏览器直接访问服务器上的应用程序和数据。B/S架构和传统的C/S架构在分工和通信方式上有所不同,但它们都属于分布式计算架构的范畴,用于构建各种类型的网络应用程序。

四、数据共享风格

4.1. 仓库风格

    仓库风格主要用于处理系统中的持久化数据的存储和检索。在这种架构风格中,仓库充当了应用程序与数据库或其他持久化存储之间的抽象层。这种抽象层隐藏了底层数据存储的复杂性,并为上层业务逻辑提供了一组简单、一致的接口。其主要特点包括:

  1. 中心化数据存储:所有的数据都被集中存储在一个中心化的数据仓库中,这样可以确保数据的一致性和统一性。

  2. 统一的数据访问接口:仓库风格提供了统一的接口,使得系统中的各个组件可以通过相同的方式来访问数据仓库,简化了系统的设计和实现。

  3. 数据的集中管理:由于所有的数据都存储在同一个数据仓库中,因此可以更加方便地进行数据管理和维护,包括备份、恢复、安全性管理等方面。

  4. 易于扩展和维护:由于数据仓库是中心化的,因此对系统进行扩展或修改时,只需要对数据仓库的接口进行调整,而不需要对系统中的其他组件进行大规模的修改。

  5. 数据的共享和复用:通过统一的数据仓库,不同的组件可以共享和复用相同的数据,避免了数据的重复存储和管理,提高了系统的效率和性能。

4.2. 黑板风格

    黑板风格是一种问题求解模型,适用于解决复杂的非结构化的问题。在黑板风格中,软件系统被设计成一个分布式的问题求解网络,其中“黑板”作为一个共享的中央知识库,用于存储问题的当前状态、所有解决方案和部分解决方案。系统的各种组件就像是在一个共享的“黑板”上交流和更新信息的“专家”。每位专家都可以看到其他专家在黑板上写下的信息,并基于这些信息进行自己的分析处理,同时也可以将自己的分析结果更新到黑板上。黑板风格的主要特点包括:

  1. 灵活性:由于黑板风格允许不同的知识源独立地工作,因此它具有很强的灵活性。新的知识源可以很容易地添加到系统中,以应对新出现的问题或需求。

  2. 并行性:由于各个知识源可以独立工作,因此黑板风格支持并行处理,这有助于提高系统的整体性能

  3. 增量式开发:随着问题求解的进展,黑板上的信息会逐渐丰富和完善。这种增量式的开发方式使得系统能够逐步逼近问题的解决方案。

4.3. 超文本风格

    超文本风格是一种基于超媒体技术的系统设计方法。超文本是一种数据表示和存储技术,它允许信息以非线性方式组织,并通过链接(超链接)连接不同的信息片段。这种风格特别适用于需要灵活、动态、交互式和非线性信息导航的应用程序,如网页浏览器和一些知识管理系统。超文本风格的核心特点包括:

  1. 非线性结构:在超文本系统中,信息以网状结构组织,用户可以通过超链接在不同的信息片段之间导航,而不是遵循固定的线性路径。

  2. 动态交互:超文本系统支持动态交互,用户的行为(如点击链接)可以触发系统状态的改变,这种状态改变通常是通过客户端和服务器之间的交互来实现的。

  3. 独立性:超文本系统中的信息片段通常是独立的,这意味着它们可以被独立地创建、更新和删除,而不需要重新组织整个信息空间。

  4. 可扩展性:由于超文本结构的灵活性,这种风格的系统通常具有良好的可扩展性,新的信息片段和链接可以轻松地加入到现有的信息网络中。

五、虚拟机风格

    虚拟机风格的基本思想是人为构建一个运行环境,在这个环境上,可以解析与运行自定义的语言,以此来增加框架的灵活性。虚拟机体系结构风格主要包括解释器风格和规则系统风格。

5.1. 解释器风格

    一个解释器通常包括完成解释工作的解释引擎,一个包含将被解释的代码的存储区,一个记录解释引擎当前工作状态的数据结构,以及一个记录源代码被解释执行进度的数据结构。具有解释器风格的软件中含有一个虚拟机,可以仿真硬件的执行过程和一些关键应用。虚拟机使用解释器来执行程序代码。解释器逐条读取、解释和执行源代码,而不是先编译成机器码再执行。这种风格的优点包括易于调试和修改代码,因为源代码和执行引擎紧密耦合。但它通常比编译执行慢,因为它需要在执行之前解释每条指令。

5.2. 规则系统风格

    基于规则的系统包括规则集、规则解释器、规则/数据选择器及工作内存。规则系统风格的虚拟机基于一组预定义的规则进行决策和处理。这种风格的系统通常用于需要复杂决策流程的场景。规则引擎根据输入数据匹配规则,并执行与规则相关的操作。这种风格的优点是灵活性高,可以较容易地添加或修改规则。

六、独立构件风格

    独立构件风格是一种将软件系统划分为多个独立、可替换的构件的架构风格,每个构件在设计时都具有清晰的接口和职责,可以在运行时独立部署、升级而不影响整个系统的正常运行。这种风格强调系统中的每个构件都是相对独立的个体,它们之间一般不直接通信,以降低耦合度,提升灵活性。这种风格的主要特点包括自治性、松耦合、可重用性和分布性。独立构件风格主要包括进程通信和事件系统风格。

6.1. 进程通信风格

    进程通信风格强调的是构件之间的相互通信。在进程通信风格中,构件通常运行在不同的进程之中,它们通过消息传递或者服务请求等方式进行通信。这种风格的优点是可以降低构件之间的耦合度,提高系统的可维护性和可扩展性。

6.2. 事件系统风格

    事件系统风格侧重于构件之间的异步通信。在这种风格中,构件之间通过事件来触发相应的处理操作。当一个构件发生特定的事件时,它会通知其他构件,其他构件则根据事件进行相应的处理。这种风格可以提高系统的响应速度和性能。

七、其他风格

7.1. 闭环-过程控制风格

    闭环-过程控制风格是一种控制架构,主要用于操作物理系统。在这种架构中,软件与硬件之间的关系可以简化为一个反馈循环。这个循环通过接收一定的输入,确定一系列的输出,最终使环境达到一个新的状态。这种控制风格特别适用于嵌入式系统,这些系统涉及连续的动作和状态。

    在闭环控制系统中,与开环控制系统的主要区别在于反馈机制的存在。开环控制是给定一个值,然后由控制器对这个值进行发送指令,执行器执行这个指令,然后将控制量提交到被控制对象,控制对象按控制的情况进行执行。然而,如果没有接收到反馈,开环控制可能会出现问题,例如指令可能丢失。

    相比之下,闭环控制通过接收反馈来不断优化其输出,以更精确地达到目标。例如,在空调的例子中,无论设定温度为18度还是24度,吹出来的风的温度应该是恒定的,这是通过闭环控制空调会不断地接收环境的温度反馈,然后调整其输出(例如风速和制冷量),以保持环境温度的稳定。

7.2. C2风格

    C2风格主要用于网络化的软件应用中,特别是那些需要清晰分层和松耦合的系统。C2架构风格概括而言,是由连接件绑定的按一定规则运行的并行构件网络。在该架构风格中,各构件之间不能直接连接,只能通过连接件的异步通信机制进行交互,使得构件的替换或更新不影响架构,这种方式体现了高内聚、松耦合的设计思想。C2架构风格的主要优点包括:

  • 松耦合:上层构件对下层构件不感知,方便更新或替换下层构件。

  • 可重用:只要符合请求及响应标准,就可重用构件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/562398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis报错:CROSSSLOT Keys in request don‘t hash to the same slot的解决方案

最近,项目上线的时候,出现了一个Redis的报错:CROSSSLOT Keys in request dont hash to the same slot,这个在内网环境下无法复现,因为正式环境的Redis是cluster集群模式,而我们内网环境是单机模式。(后面我…

k8s安装,linux-ubuntu上面kubernetes详细安装过程

官方文档:https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/ 环境配置 该部分每个主机都要执行 如果你确定不需要某个特定设置,则可以跳过它。 设置root登录 sudo passwd root sudo vim /etc/ssh/sshd_config Perm…

深入OceanBase内部机制:资源隔离实现的方式总结

码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! 目录 1. 为何HTAP需要资源隔离2. OceanBase的资源隔离机制概述租户间资源隔离租户内资源隔离物理资源隔离大查询请求的隔离优先级…

排序 “贰” 之选择排序

目录 ​编辑 1. 选择排序基本思想 2. 直接选择排序 2.1 实现步骤 2.2 代码示例 2.3 直接选择排序的特性总结 3. 堆排序 3.1 实现步骤 3.2 代码示例 3.3 堆排序的特性总结 1. 选择排序基本思想 每一次从待排序的数据元素中选出最小(或最大)的一个…

【剪映专业版】13快速为视频配好音:清晰、无噪声、对齐

视频课程:B站有知公开课【剪映电脑版教程】 使用场景:视频无声音或者视频有声音但是需要更改声音 时间指示器在哪里,就从哪里开始 红色按钮:开始录音 声音波纹:蓝色最佳,黄色或红色声音太大,…

网络原理-UDP和TCP

在传输层中有两个非常重要的协议,UDP和TCP,现在就来研究一下这两个协议。 UDP 报文格式 我们观察可以发现,里面UDP报文长度为2个字节,那么是多少呢?我们需要快速反应如下固定字节数据类型的取值范围: 字…

open Gauss 数据库-06 openGauss数据库安全指导手册5.0.0

发文章是为了证明自己真的掌握了一个知识,同时给他人带来帮助,如有问题,欢迎指正,祝大家万事胜意! 目录 前言 openGauss数据库安全指导 1 用户权限控制 1.1 实验介绍 1.1.1 关于本实验 1.1.2 实验目的 1.2 用户…

ACE框架学习2

目录 ACE Service Configurator框架 ACE_Server_Object类 ACE_Server_Repository类 ACE_Server_Config类 ACE Task框架 ACE_Message_Queue类 ACE_TASK类 在开始之前&#xff0c;首先介绍一下模板类的实例化和使用。给出以下代码 //ACCEPTOR代表模板的方法 template <…

CAS Client使用以及执行原理

CAS Client使用以及执行原理 流程介绍 CAS Client是利用Java Web中的Filter进行实现认证功能&#xff0c;客户端对CAS Server的认证流程分为以下步骤&#xff1a; 访问CAS Client服务 由于当前session中未检测到认证信息&#xff0c;会重定向到CAS Server地址进行认证 在CA…

【深度学习】Dropout、DropPath

一、Dropout 1. 概念 Dropout 在训练阶段会让当前层每个神经元以drop_prob&#xff08; 0 ≤ drop_prob ≤ 1 0\leq\text{drop\_prob}\leq1 0≤drop_prob≤1&#xff09;的概率失活并停止工作&#xff0c;效果如下图。 在测试阶段不会进行Dropout。由于不同批次、不同样本的神…

IMUGNSS的误差状态卡尔曼滤波器(ESKF)---更新过程

IMU&GNSS的误差状态卡尔曼滤波器&#xff08;ESKF&#xff09;---更新过程 ESKF的更新过程 ESKF的更新过程 前面介绍的是ESKF的运动过程&#xff0c;现在考虑更新过程。假设一个抽象的传感器能够对状态变量产生观测&#xff0c;其观测方程为抽象的h,那么可以写为 其中z为…

创新指南|节日期间提高销量的 10 个最佳技巧

许多网上购物者在感恩节前开始假日购物。假期是在线企业销售产品和增加销售额的最佳时机。根据万事达卡的数据&#xff0c;去年在线假日销售额增长了 10.6%&#xff0c;而店内销售额增长了 6.8%。此外&#xff0c;2023年美国消费者平均计划在假日旺季花费约1,530美元。在线企业…

存储过程的查询

Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在实际使用中&#xff0c;经常会需要查询数据库中已有的存储过程或者某一个存储过程的内容&#xff0c; 下面就介绍-下如何查询存储过程。 这需要使用到数据字典 user_sou…

vscode 配置verilog环境

一、常用的设置 1、语言设置 安装如下插件&#xff0c;然后在config 2、编码格式设置 解决中文注释乱码问题。vivado 默认是这个格式&#xff0c;这里也设置一样。 ctrl shift p 打开设置项 3、插件信任区设 打开一个verilog 文件&#xff0c;显示是纯本文&#xff0c;没…

B树和B+树试题解析

一、单项选择题 01&#xff0e;下图所示是一棵&#xff08;A ). A.4阶B树 B.3阶B树 C.4阶B树 D.无法确定 02.下列关于m阶B树的说法中&#xff0c;错误的是( C ). A.根结点至多有m棵子树 B.所有叶结点都在同一层次上 C.非叶结点至…

算法入门——二分查找

目录 1、二分模板 2、习题 1.704.二分查找 2.35.搜索插入位置 3.744. 寻找比目标字母大的最小字母 4.69. x 的平方根 5.1351. 统计有序矩阵中的负数 6.74. 搜索二维矩阵 7.34. 在排序数组中查找元素的第一个和最后一个位置 8.33. 搜索旋转排序数组 9.153. 寻找旋转排…

【GoWeb框架初探————XORM篇】

1. XORM xorm 是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便。 1.1 特性 支持 Struct 和数据库表之间的灵活映射&#xff0c;并支持自动同步事务支持同时支持原始SQL语句和ORM操作的混合执行使用连写来简化调用支持使用ID, In, Where, Limit, Join, Havi…

java学习笔记2

3 选择结构 3.1 if选择结构 3.1.1 基本if结构 语法if(条件){// 代码块 }执行流程 当if条件为真,执行代码块,否则不执行代码块。 代码 public class Demo1 {public static void main(String[] args) {// 需求: 张浩的考试成绩>90分,奖励一部Iphone6sScanner sc = new S…

mapreduce中的ReduceTask工作机制(Hadoop)

ReduceTask 是 Hadoop 中的一个重要组件&#xff0c;负责对 MapTask 的输出进行合并、排序和归并&#xff0c;最终生成最终的输出结果。 ReduceTask 的工作机制 1. 分组&#xff08;Shuffle&#xff09;阶段&#xff1a; 在分组阶段&#xff0c;ReduceTask 会从多个 Mapper …

第二届 Oceanbase 开发者大会 实录

第二届 Oceanbase 开发者大会 实录 今天很有幸参加了Oceanbase 开发者大会&#xff0c;我是真的我一开始还不知道什么是Oceanbase &#xff0c;直到我开了会才知道。看来真的需要多参加一些这样活动。 会议议程 我们科普一下什么是Oceanbase OceanBase 是阿里巴巴集团推出…