[架构之路-255]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 软件架构风格

前言:

风格是指在不同领域内,人们在表达自己的过程中(如艺术、音乐、文化、时尚、建筑、软件系统等),所选择的、相对稳定的表达方式和特征的总和。在不同领域内都存在着多种不同的风格。

在艺术领域内,也有许多不同的风格,比如著名的印象派、抽象表现主义、中国画、波普艺术等等;在音乐领域中,也有传统的古典音乐和更现代的流行音乐等;在时尚领域中,也有各种不同的服装风格,如商务、休闲、复古、前卫等;在建筑领域中,也有古典主义、哥特式、现代主义等不同的风格。

每种风格都有其独特的特征和表现方式,能够引起人们的情感共鸣,也同时反映了不同历史和文化背景下人们的审美价值观和审美追求。同时,风格也是不断发展变化的,新的表达方式和特征也在不断地涌现和定义。

软件架构风格是指解决某一类问题的软件设计的套路和风格

确认软件架构风格是软件架构设计的第一步,就像建房子之前,首先确定建造升什么样风格的房子一样,然后在看房子内部的构造和结构。做软件设计也是一样,首先要确定软件架构的风格,而软件架构的风格取决于软件要解决的业务系统的业务需求,包括非功能性需求。

一、建筑风格

1.1 什么是建筑风格

建筑风格是指在建筑设计和建造过程中,对建筑形式、结构、材料和装饰等方面的一种艺术风格或设计风格的选择和体现。它涵盖了建筑的外观特征、空间布局和建筑元素的组合方式等方面

不同的建筑风格在不同的历史时期和地区出现,并反映了当时社会、文化、经济和技术等方面的特征。每一种建筑风格都具有独特的外观和特点,以及对建筑形式和建筑构造的特定要求。

建筑风格指建筑设计中在内容和外貌方面所反映的特征,主要在于建筑的平面布局、形态构成、艺术处理和手法运用等方面所显示的独创和完美的意境。建筑风格因受时代的政治、社会、经济、建筑材料和建筑技术等的制约以及建筑设计思想、观点和艺术素养等的影响而有所不同。中国特有的建筑风格。

 如外国建筑史中古希腊、古罗马有多立克、爱奥尼克和科林斯等代表性建筑柱式风格;

中古时代有哥特建筑的建筑风格;

文艺复兴后期有运用矫揉奇异手法的巴洛克和纤巧烦琐的洛可可等建筑风格。

我国古代宫殿建筑,其平面严谨对称,主次分明,砖墙木梁架结构,飞檐、斗栱、藻井和雕梁画栋等形成

1.2 常见的建筑风格

常见的建筑风格包括以下几种:

  1. 古典主义风格:古希腊罗马文化的影响下,强调对称、规则和比例。典型的古典主义风格包括古典希腊柱式、罗马拱门和圆顶等特征。

  2. 哥特式风格:哥特式建筑风格起源于中世纪的欧洲,以其尖拱形和高耸的尖塔为特征。教堂和大教堂是哥特式建筑最典型的代表。

  3. 文艺复兴风格:文艺复兴建筑风格起源于15世纪的意大利,强调对古典艺术和建筑的研究与恢复。特点包括对称、圆顶和半圆形拱门等。

  4. 巴洛克风格:巴洛克建筑风格在17世纪至18世纪的欧洲流行,追求奢华、装饰和浮华。典型的巴洛克风格包括复杂的立面、曲线和扭曲的形状。

  5. 新古典主义风格:新古典主义建筑风格是18世纪末至19世纪初受到古典主义风格启发的建筑风格,它回归古代希腊罗马文化的典雅和平衡。

  6. 现代主义风格:现代主义建筑风格追求简洁、功能性和实用性。它摒弃了传统的装饰和多余的装饰,注重形式与功能的一致性。

  7. 后现代主义风格:后现代主义建筑风格强调对传统建筑规范的挑战,追求个性和创新。它通常表现为复杂的形状、丰富的装饰和多样化的细节。

这些仅仅是一小部分常见的建筑风格,每一种风格都有自己独特的特点和表达方式,能够通过建筑艺术来契合当时的时代背景和文化价值观。

1.3 如何区分不同的建筑风格

区分不同的建筑风格需要考虑以下几个方面:

  1. 外观特征:不同的建筑风格通常具有独特的外观特征。例如,古典主义风格通常具有对称的立面和古典柱式;哥特式风格以尖拱形窗户和尖顶为标志;现代主义风格则追求简洁的线条和功能性。

  2. 建筑元素:不同的建筑风格使用不同的建筑元素和装饰。例如,古典主义建筑常常使用带有装饰的柱子、凯旋门等;巴洛克风格强调曲线和扭曲的形状;文艺复兴风格则使用圆顶、拱门等。

  3. 结构和布局:不同的建筑风格也会在建筑的结构和布局上有所区别。例如,哥特式教堂通常具有高耸的尖塔和复杂的拱顶结构;现代主义建筑追求简洁的水平线条和开放的空间布局。

  4. 历史和文化背景:建筑风格往往与特定的历史和文化背景相关。了解一个建筑风格的历史和文化背景可以帮助我们更好地理解它的特点和意义。

通过对建筑的外观特征、建筑元素、结构和布局、历史和文化背景等方面的观察和研究,我们可以相对准确地区分不同的建筑风格。同时,查阅相关的建筑书籍、参观建筑博物馆和历史建筑等也是了解建筑风格的有效途径。

二、软件架构风格概述

2.1 什么是软件架构风格

软件架构风格指的是针对软件的整体结构和设计方法所采用的一种通用风格或模式,是进行软件开发的通用指导原则。它关注的是系统整体结构并定义了许多重要的设计决策,如如何组织代码、如何将代码模块化、如何进行通信等,以便有效地满足利益相关者的需求。

2.2 如何区分不同的软件架构风格

软件架构风格包含了以下几个方面的内容:

  1. 组件和连接方式:软件架构风格定义了组件的类型、功能和责任,以及它们之间的连接方式。这些组件可以是模块、类、服务、库或其他相关的构件。架构风格决定了这些组件如何相互合作和交流,以实现系统的功能和目标

  2. 整体结构模式:软件架构风格通常使用一系列的结构模式,如分层、客户端-服务器、发布-订阅、管道-过滤器等,来定义系统的整体结构。结构模式定义了组件之间的关系和通信方式,以及数据流和控制流的组织方式

  3. 非功能性需求:软件架构风格还考虑了系统的非功能性需求,如性能、可伸缩性、可靠性、安全性、可维护性等。不同的架构风格对非功能性需求有不同的关注和优化点。

  4. 设计原则和约束:件架构风格通常借用了一些设计原则和约束条件,如单一职责原则、开闭原则、迪米特法则等,来指导组件的设计和实现。这些原则和约束可以帮助确保系统具有良好的结构和可扩展性。

  5. 配置和部署:软件架构风格还可能涉及到系统的部署和配置方面的决策。这包括决定部署的拓扑结构、物理硬件需求、软件环境需求等。架构风格可以影响系统的可部署性、可伸缩性和性能。

总之,软件架构风格定义了系统的整体结构、组件和连接方式,并考虑了非功能性需求、设计原则和部署方面的要求。选择适合的软件架构风格是构建可靠、灵活和可扩展系统的重要一步。

备注:

软件架构部需要定义软件组件之间详细的接口定义!!!!

2.3 软件架构风格的发展阶段

架构风格的发展可以分为以下几个阶段:

  1. 早期阶段:在早期的计算机发展阶段,软件架构的概念并没有明确的定义。开发人员主要关注于编写代码和解决特定的问题,对于系统整体的结构和组织并没有深入的思考。

  2. 面向对象阶段:随着面向对象编程的兴起,软件架构开始引入组件化和模块化的概念。设计模式(如MVC、单例模式、观察者模式等)开始被广泛应用,使得系统的结构更加清晰和灵活。

  3. 分布式阶段:随着互联网的普及和分布式计算的兴起,分布式架构风格开始受到关注。客户端-服务器架构、基于消息传递的架构(如消息队列)、微服务架构等成为主流。这些架构风格通过将系统拆分成独立的模块或服务,并通过网络进行通信来实现各种功能。

  4. 服务导向阶段:服务导向架构(SOA)提供了一种组织和集成系统的方法,通过将系统划分为一系列自治服务来实现业务功能。SOA允许服务的独立开发、部署和升级,提供了更好的可扩展性和松耦合性。

  5. 云计算和容器化阶段:云计算和容器化技术的兴起推动了软件架构的演进。云架构、容器化部署和微服务架构的组合成为了现代云原生应用开发的关键。

在不同的阶段,软件架构的关注点和技术工具有所变化。从最初的代码编写到面向对象设计,再到分布式、服务导向和云计算阶段,软件架构风格不断演进,以适应不断变化的需求和技术环境。

2.4 软件架构风格与软件架构的区别

软件架构和软件架构风格之间存在一定的区别。

软件架构是指系统的整体结构、组件、连接方式以及它们之间的关系,它定义了系统的概念结构和物理结构,包括软件和硬件之间的交互。它从系统整体的角度出发,考虑各种需求因素,确定系统的整体框架,并定义系统的各种组成部分的职责,以实现系统的稳定性、可扩展性、可靠性、可维护性等。

而软件架构风格则是一种模板和约定,它定义了一组常用的架构方案,指导系统的设计和实现。它通常涉及到系统的模块化、组件化、连接方式、非功能需求等方面,是对某些具体问题的解决方案的总结和经验,可以被视为一种通用的解决方案。常见的软件架构风格有分层架构、客户端-服务器架构、微服务架构等。

因此,软件架构是针对一个特定系统的设计,它是对架构决策、组织结构和技术的细节的直接描述。而软件架构风格则是面向各种平台、场景和应用领域的通用解决方,它是一组通用的原则和设计模式,可以作为指导系统架构设计的参考模型。

2.5 常见的软件架构风格的种类

常见的软件架构风格包括以下几种:

  1. A-数据流风格:数据流风格是一种针对数据流和数据处理的软件架构风格。该风格的主要思想是将系统分解为一些小型的处理单元,并将它们按照数据流的方向进行连接。

  2. A-数据流风格 - 管道-过滤器架构(Pipe-and-Filter Architecture):将系统分为若干个过滤器,每个过滤器都是一段独立的处理单元,通过管道连接起来,以实现数据流的处理和分离。

  3. A-数据流风格 - 批处理序列:数据流风格中的批处理序列是一种常见的数据流处理模式,它以被划分为批次的数据流为基础,对批次数据进行连续的处理。

  4. B-调用返回风格(同步调用):调用返回风格(Call-return style)是一种常见的编程风格,其中函数或方法的调用者在调用完函数后,会等待函数执行完成并返回结果,然后再继续执行下一条语句

    在调用返回风格中,调用者通过调用函数的名称和参数将控制权转移给被调用的函数,同时传递所需的参数。被调用的函数会执行特定的操作,并将结果返回给调用者

  5. B-分层/层次架构(Layered Architecture):将系统分为若干个层,每一层提供一组紧密相关的功能,并且不同层之间的依赖关系只允许往下层进行,以实现系统的松耦合和可维护性。

  6. B-客户端-服务器CS架构(Client-Server Architecture):将系统分为客户端和服务器端两个部分,客户端发起请求,服务器端进行响应,以实现系统的分布式和并发性。

  7. B-Web-服务器BS架构(Client-Server Architecture):将系统分为IE客户端和服务器端两个部分,Web客户端发起请求,服务器端进行响应,以实现系统的分布式和并发性。

  8. B-MVC架构(Model-View-Controller Architecture):将系统分为模型(Model)、视图(View)和控制器(Controller)三个部分,模型负责处理数据,视图负责展示数据,控制器负责协调模型和视图之间的交互,以实现系统的灵活性和可扩展性。

  9. B-微服务架构(Microservices Architecture):将系统分为若干个独立的小型服务,每个微服务负责一部分功能,以实现系统的可伸缩性和自治性。

  10. C-发布-订阅架构(Publish-Subscribe Architecture):将系统分为发布者和订阅者两个部分,发布者负责发布事件,订阅者通过订阅事件获取信息,以实现系统的事件驱动和解耦。

  11. C-事件驱动架构(Event-Driven Architecture):将系统分为若干事件和事件处理程序,通过事件的触发和处理来实现系统的响应、解耦和可扩展性。

  12. D-虚拟机风格-解释器:在虚拟机风格中,解释器是一种将源代码逐条解释并执行的软件程序。它将高级语言或特定领域语言的代码逐条翻译成虚拟机能够执行的指令,并逐步执行这些指令来实现代码的功能。解释器的工作方式是逐条读取源代码,将每条代码转化为一系列虚拟机指令,并按顺序执行这些指令。解释器会逐条解释指令中的操作,根据需要读取和修改虚拟机的状态(例如变量的值、函数的调用栈等),并根据指令的规定执行相应的操作。这种逐条解释和执行的过程使得解释器的执行速度相对较慢,但具有一定的灵活性和跨平台性。

  13. D-虚拟机风格-基于规则:基于规则的系统是一种在虚拟机风格中应用规则引擎的软件系统。这种系统使用规则引擎来推理、匹配和处理规则,从而实现特定的功能和逻辑。

    基于规则的系统的核心是规则引擎,它负责解析、匹配和执行规则。

  14. E-仓库风格-数据库系统:仓库风格的数据库系统是一种将数据存储在中央仓库中的系统。这种系统结构常见于传统的数据仓库和商业智能系统,用于集中存储和管理大量的结构化和非结构化数据,并支持数据的分析和报告。

    在仓库风格的数据库系统中,数据仓库可以被看作是一个中央化的数据存储和管理机构,用于集中存储来自多个源系统的数据,并按照一致的数据模型进行组织和管理。数据可以从各种数据源(例如生产系统、事务性数据库、外部数据源等)中提取、清洗和转换,然后装载到数据仓库中。

  15. E-仓库风格-超文本系统:仓库风格的超文本系统(Warehouse-style Hypertext System)是一种将超文本内容存储在多个服务器上,并在需要时透明地将其组合到单个网页中的系统。

  16. E-仓库风格-黑板系统:仓库风格的黑板系统(Warehouse-style Blackboard System)是一种基于分布式计算的问题解决框架,用于处理大规模、复杂和动态的问题。

    黑板系统的核心思想是将问题分解成多个子问题,并通过共享数据和知识来实现分布式的问题求解。

总之,不同的软件架构风格有着不同的特点和优劣势,并适用于不同的应用场景和业务需求。在实际开发中,需要根据具体的需求来选择适合的架构风格。

1.8 复杂软件系统可以组合多种架构风格

复杂软件系统通常可以采用多种架构风格,这种情况称为多种架构风格混合或混合架构。使用多种架构风格的混合可以根据系统的不同需求和组件的特性来灵活选择和组合不同的架构风格。

以下是一些常见的情况,其中复杂软件系统可以同时采用多种架构风格

  1. 模块化架构:将系统划分为多个模块,并对每个模块选择最适合的架构风格。例如,可以将核心业务逻辑采用微服务架构,而前端界面采用MVC架构。同时可以结合分层架构。

  2. 同步与异步架构:在复杂系统中,可以根据不同的组件之间的通信方式选择不同的架构风格。例如,可以采用同步架构实现核心计算模块,同时采用事件驱动架构实现消息处理模块。

  3. 客户端-服务器与点对点架构:对于具有集中式和分布式特性的系统,可以同时采用客户端-服务器架构和点对点架构。客户端-服务器架构适用于部分核心业务逻辑集中处理的场景,而点对点架构适用于多个节点之间的直接通信场景。

  4. 分层架构与微服务架构:对于大型系统,可以选择采用分层架构来处理整体系统的结构和职责,而在某些业务模块中采用微服务架构来实现更大的灵活性和独立性。

在实践中,将不同架构风格混合使用可以具备更大的灵活性和适应性,以满足复杂软件系统的各种需求。然而,混合架构也会增加系统的复杂性和维护成本,需要仔细的设计和管理,确保不同的架构风格之间的交互和集成顺利进行。

二、常见的软件架构风格详解

2.1 A-数据流风格:适合数据面业务处理

(1)A-数据流风格 - 管道-过滤器架构(Pipe-and-Filter Architecture)

数据流风格是一种基于数据流的软件架构风格,它通过数据流模块化和高内聚的方式组织系统,并通过过滤器数据进行处理。在数据流风格中,模块被设计成过滤器,从一个或多个输入数据流中读取数据并生成一个或多个输出数据流

管道-过滤器架构(Pipe and Filter Architecture)是数据流风格的一种常见实现方式。该架构将过滤器组织成一个数据流管道,从而实现数据流的连续处理

在管道-过滤器架构中,过滤器可以包括输入过滤器、处理过滤器和输出过滤器

输入过滤器从系统外部数据源读取数据,并将其转化成系统内部的数据格式。

处理过滤器执行各种数据操作和算法,从输入流中读取数据并将处理后的数据传递到输出流中。

输出过滤器将处理后的数据输出到系统外部或传递给下一个过滤器进行处理。

管道-过滤器架构的优点包括:

  1. 模块化和可重用:过滤器在管道中具有相对独立的功能,可以重用和扩展,提高了系统的可维护性。

  2. 高内聚和低耦合过滤器仅关注单一任务,并且只和相邻的过滤器连接,使得系统具有高内聚和低耦合的性质。

  3. 灵活和可配置:管道中的过滤器可以根据需要添加或删除,可以配置成不同的管道组合以实现不同的数据流处理需求。

  4. 可并行和可分布式:管道-过滤器架构的并行性和可分布性使得它可以适应大规模和高吞吐量的数据处理。

然而,管道-过滤器架构也存在一些限制。例如,管道中的数据流必须是有序的,因为每个过滤器的输入都依赖于上一个过滤器的输出。此外,管道中的过滤器也必须保证正确的处理数据,避免数据丢失和不正确的计算。

管道-过滤器架构适用于数据流处理和处理流式数据。它广泛应用于数据仓库、实时数据处理、数据分析和机器学习等领域。

管道-过滤器架构是一种非常流行的系统架构设计模式,被广泛应用于各种数据处理和解析场景。下面是一些管道-过滤器架构的应用案例:

  1. Unix系统

Unix系统是一个经典的管道-过滤器架构的应用案例,它的命令行工具通过将一系列小型的命令为核心构建成强大的工具。通过将命令以管道的方式串行组合起来,可以实现对文本、文件、进程和网络连接的高效处理和管理

  1. 数据分析

在数据分析领域,管道-过滤器架构可以用于对大量数据进行处理和过滤。例如,将数据文件导入到Hadoop框架中,应用一系列分布式计算和过滤器,最终输出处理后的结果。

  1. 图像处理

在图像处理领域,管道-过滤器架构可以用于设计复杂的图像处理流水线。这些流水线可以包括图像的载入、预处理、滤波、降噪、特征提取、分类和输出等步骤。每个步骤可以被实现为一个独立的过滤器多个过滤器可以被组合成一个流水线。

  1. 通信协议

在网络通信领域,管道-过滤器架构可以应用于设计复杂的通信协议。这种设计利用了层次化的思想,将不同层次的协议在一个通信过程中逐层处理,每个层次通过一个过滤器来实现。

总的来说,管道-过滤器架构具有可扩展性、可组合性和易于实现的优点,可以应用于各种数据处理场景。在实现中,需要避免过多的过滤器或数据流操作,以避免性能的下降。

(2)A-数据流风格 - 批处理序列:

在数据流风格中,批处理序列是一种处理数据的模式,其中数据被分组成批次,并按顺序通过一系列的数据处理阶段进行处理

批处理序列的特点是将数据分成连续的批次进行处理,而不是一次处理单个数据项。每个批次中的数据被送入数据流中的处理器进行处理,处理结果可以进一步传递给下一个处理器。这种方式使得批处理序列适用于大规模数据处理和离线数据处理任务。

在批处理序列中,通常包含以下几个核心组件:

  1. 输入:批处理序列从一个或多个数据源读取输入数据。数据源可以是文件、数据库、消息队列等。输入数据被分成批次,每个批次中有一定数量的数据项。

  2. 数据处理阶段:数据处理阶段是批处理序列的核心,它由一个或多个数据处理器组成。每个处理器负责对一个批次中的数据进行特定的处理操作,如转换、过滤、统计等。处理器之间的数据流采用管道方式传递,即每个处理器的输出作为下一个处理器的输入。

  3. 输出:处理完成后的数据可以写入到文件、数据库,或者传递给下游系统进行进一步处理。输出可以是整个批次的结果,也可以是每个数据项的结果。

  4. 调度与控制:批处理序列的执行通常需要有一个调度器或控制器来控制处理器的执行顺序和处理批次的分发。调度器可以基于时间、触发条件或某种策略来触发批处理任务的执行。

批处理序列适用于需求相对固定、不需要实时响应和高吞吐量的场景。它常用于离线数据处理、数据清洗和分析等任务,如每日报表生成、日志分析等。常见的批处理框架和工具包括Apache Hadoop的MapReduce、Apache Spark的批处理模式等。

批处理序列是数据流风格的一种具体应用,它将数据处理过程划分为多个离散的批次,每个批次按照一定的顺序依次进行处理。以下是一些批处理序列的应用案例:

  1. 批量数据处理

批处理序列广泛应用于批量数据处理场景,例如大规模数据的清洗、转换、整合和分析等。通过将数据分割成多个批次,可以对每个批次进行处理减少内存占用和提高处理效率

  1. ETL流程

在数据仓库和大数据处理中,ETL(Extract, Transform, Load)流程常使用批处理序列进行数据抽取、转换和加载。数据从源系统中抽取出来,经过一系列的转换操作后,再加载到目标系统中。

  1. 日志处理

批处理序列可以用于对大量日志进行处理和分析。通过按时间段划分为不同的批次,可以对每个时间段内(批量处理)的日志进行聚合、过滤、统计和分析,以提取出有用的信息。

  1. 批量作业处理

在系统管理和任务调度中,批处理序列可以用于处理批量作业。例如,对一组文件进行批量操作定时执行批量任务或批量生成报告等。

  1. 批量交易处理

在金融和电子商务领域,批处理序列可以应用于批量交易处理。例如,每日对一批交易记录进行结算、清算、对账和报告生成等。

总的来说,批处理序列是数据流风格的一种应用,适用于需要按照一定顺序进行离散数据处理的场景。它可以提高处理效率,降低内存使用,并适应大规模数据处理的需求。

(3)管道-过滤器架构与批处理序列区别

管道-过滤器架构和批处理序列是两种不同的数据流风格和处理模式,它们具有以下区别:

  1. 数据处理粒度:在管道-过滤器架构中,数据是以流的形式在过滤器之间传递,每个过滤器可以处理单个数据项或数据流的一部分过滤器可以实时处理数据,并将其传递给下一个过滤器。而在批处理序列中,数据是以批次的形式进行处理,一次处理一批数据。每个批次中的数据项可以被一系列的处理阶段处理,然后将批次的结果传递给下一个阶段。

  2. 数据处理模式:管道-过滤器架构适用于实时数据处理流式数据处理,其中数据是连续传递和处理的。每个过滤器负责对数据进行特定的操作,并将其转发给下一个过滤器。而批处理序列适用于离线数据处理和批量数据处理,其中数据被分成批次进行处理。每个批次的数据被按顺序通过一系列的处理阶段进行处理。

  3. 数据流的组合:在管道-过滤器架构中,可以通过组合不同的过滤器来创建复杂的数据处理流程。过滤器之间的连接可以是任意的,可以根据需要动态地配置和调整数据流的组合。而在批处理序列中,数据处理是以固定的顺序进行的,每个阶段按顺序处理每个数据批次。

  4. 实时处理 vs 离线处理:管道-过滤器架构更适合于实时或流式数据处理,它的设计目标是处理连续的数据流。而批处理序列更适合于离线处理和大规模数据处理,它以批次方式处理数据,更适合于处理有限而稳定的数据量。

需要注意的是,管道-过滤器架构和批处理序列并不是互斥的概念,它们可以结合使用。在实际场景中,可以将批处理序列作为管道-过滤器架构中的一个过滤器,用于批量处理一部分数据,然后将处理后的批次数据传递给下一个过滤器进行进一步处理。这种组合可以同时享受到批处理的高效性和管道-过滤器架构的灵活性。

2.2 B-调用返回风格(同步调用):

(1)B-分层/层次架构(Layered Architecture):

分层架构(也称为层次架构)是软件设计中常用的一种架构模式,它将系统划分为多个层次,每个层次有特定的责任和功能。每个层次都通过定义明确定义的接口与相邻的层次进行通信,以实现系统的解耦和可扩展性。

以下是分层架构的概述和几个应用案例:

概述:

  1. 分离关注点:分层架构的核心思想是将系统功能分解成多个层次,每个层次专注于解决特定的关注点。这种分离使得不同层次的功能更加清晰、易于理解和维护。

  2. 松耦合结构:每个层次在与相邻层次通信时,只通过接口进行交互,而不关心具体实现。这种松散的耦合关系使得系统更容易被修改、扩展和替换,提高了系统的灵活性。

  3. 可维护性:分层架构将系统按功能分解成多个层,每个层次都有特定的责任和职责。这种明确的职责分工有助于理解和维护系统。

案例:

  1. MVC架构:MVC(Model-View-Controller)是一种常见的分层架构,被广泛应用于Web应用开发。模型(Model)层负责业务逻辑处理和数据存储,视图(View)层负责用户界面展示,控制器(Controller)层负责接收和处理用户的请求,并将合适的数据传递给模型和视图

  2. OSI模型:OSI(Open Systems Interconnection)模型是计算机网络领域中的分层架构。它将网络通信划分为七个层次,包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每个层次有独立的功能和责任,并通过明确定义的接口调用进行通信。

  3. 三层架构:三层架构是一种常用的分层架构模式,在软件开发中被广泛采用。它将应用程序划分为表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)三个层次。表示层负责用户界面呈现,业务逻辑层负责处理业务逻辑,数据访问层负责与数据库交互。

总而言之,分层架构通过将系统划分为多个独立的层次,使得系统的功能和责任职责更加清晰明确。它提供了解耦、可扩展和易于理解的设计方式,并被广泛应用于各种软件系统和领域。

(2)B-客户端-服务器CS架构(Client-Server Architecture):

客户端-服务器(CS)架构风格是一种分布式系统架构,它将系统分为客户端和服务器两个部分,客户端发送请求,服务器提供服务并返回响应。

CS架构分离了数据和应用逻辑,使得不同的客户端可以使用相同的逻辑和数据资源。

以下是CS架构的概述和几个应用案例:

概述:

  1. 双向通信:客户端-服务器架构使用客户端发送请求,服务器提供服务的模式。客户端发送请求,服务器返回响应,使得双方能够实现双向通信。

  2. 系统分离:CS架构将系统分成两个部分,客户端和服务器,分离了数据和应用逻辑/界面,使得不同平台和设备均可使用相同的逻辑和数据资源。

  3. 代码复用:CS架构可以实现代码的重用,由于逻辑和数据存储与应用程序的界面分离,不同的客户端可以使用相同的逻辑和数据资源

应用案例:

  1. Web应用程序 :Web应用程序通常采用CS架构。Web浏览器作为客户端,发送请求到Web服务器,服务器将响应返回给客户端以呈现页面 。

  2. 游戏 :游戏通常采用CS架构。游戏客户端发送请求到游戏服务器,服务器返回响应,从而实现游戏状态的同步和信息的传递。

  3. 企业系统 :企业管理系统通常采用CS架构。客户端作为用户使用界面,向服务器请求数据和处理业务逻辑。服务器处理请求,操作数据库并返回响应。

  4. 电子商务,比如淘宝 :电子商务通常采用CS架构。客户端向服务器发送请求来访问商品目录,服务器将数据返回给客户端。客户端再向服务器发送请求来执行购买操作并向服务器传递付款等信息。

总之,客户端-服务器(CS)架构使不同平台和设备均可以使用相同的逻辑和数据资源。CS架构广泛应用于各种应用场景,包括Web应用程序、游戏、企业系统和电子商务等。

(3)B-Web-服务器BS架构(Client-Server Architecture):

Web服务器-浏览器(BS)架构风格是一种常见的Web应用程序架构,它将Web应用程序分为两个部分:客户端和服务器端。在BS架构中,浏览器作为客户端,用户通过浏览器向服务器发送请求,服务器进行处理并返回响应,界面展示也由浏览器负责。

以下是BS架构的概述和几个应用案例:

概述:

  1. 客户端-服务端模式:BS架构采用客户端-服务端模式,将 Web 应用程序分成了客户端和服务器端两个部分。浏览器作为客户端,负责向服务器发送请求和呈现数据,服务器进行处理并返回响应。

  2. 可跨平台性:由于Web浏览器是跨平台的,并且无需安装特定的应用程序,因此任何平台上的浏览器都可以使用Web应用程序。

  3. 统一的数据访问接口:在BS架构中,数据访问接口独立于客户端的操作系统和浏览器,统一数据访问接口有利于后端数据系统的维护和管理。

应用案例:

  1. 电子商务:电子商务是BS架构中的一个重要应用领域。用户可以通过浏览器访问电子商务网站,使用网站提供的功能,例如浏览商品、下订单、支付、评价等。

  2. 企业系统:企业系统中的许多应用程序也采用了BS架构,例如企业邮箱和人事管理系统等。用户可以通过浏览器访问公司的Web应用程序,完成实现邮件查看、职位调整、工资管理等功能。

  3. 社交媒体:社交媒体通常采用BS架构。用户可以通过浏览器访问社交媒体网站,使用网站提供的功能,例如浏览朋友圈、发布动态、私信聊天等。

总体来说,Web服务器-浏览器(BS)架构风格是一种常见的Web应用程序架构,它通过将Web应用程序分为客户端和服务端,充分利用了Web浏览器的跨平台特性,并提供了一种统一的数据访问接口,适用于各种Web应用程序,如电子商务、企业系统、社交媒体等。

(4)B-MVC架构(Model-View-Controller Architecture):

MVC架构(Model-View-Controller)是一种常见的分层架构模式,被广泛应用于Web应用程序开发中。

该架构将应用程序划分为三个部分:模型(Model)、视图(View)和控制器(Controller)。

以下是MVC架构的概述和几个应用案例:

概述:

  1. 分离关注点:MVC架构将应用程序分成了三个独立的部分,每个部分专注于解决特定的关注点。模型层负责业务逻辑和数据存储,视图层负责用户界面展示,控制器层负责协调和控制数据传输。

  2. 系统松耦合:每个层次都具有独立的功能和职责,通过定义明确的接口进行通信,从而松耦合系统,使得系统更容易被扩展、修改和维护。

  3. 明确职责:MVC架构提供明确的职责分工,有助于开发人员理解和管理整个应用程序。

应用案例:

  1. Web应用程序:Web应用程序通常采用MVC架构。使用框架例如Spring MVC和Ruby on Rails,MVC体系结构本质上是分层设计的模式,并且是在服务器端实现的。服务器端的模型层负责处理数据库操作和业务逻辑,客户端的视图层负责呈现内容,控制器层负责接收请求并决定如何响应统筹调度和控制整个流程

  2. 桌面应用程序:桌面应用程序使用MVC架构可实现响应式和环节加载效果,并允许将前端数据调整与后端数据管理分开进行。其中,Java Swing框架支持MVC架构,其中模型层承担数据管理和状态,视图层负责呈现内容和处理用户界面,控制器层负责处理用户操作,并协调视图和模型层的行为。

  3. 移动应用程序:移动应用程序可以使用MVC架构实现分层设计,使内存使用率优化,缩短响应时间。例如,iOS应用程序使用MVC设计模式以优化数据管理和页面展示。

综上,MVC架构提供了清晰的关注点,使得每个层次都具有独立的功能和职责,并通过定义明确的接口进行通信。MVC架构通常在Web程序开发、桌面应用程序和移动应用程序中得到广泛应用。

(5)B-微服务架构(Microservices Architecture):

微服务架构是一种分布式架构风格,它将服务端的应用程序分解为一组小型、松耦合的服务,每个服务负责单一业务功能

以下是微服务架构的概述和几个应用案例:

概述:

  1. 单一责任原则:微服务架构中的每个服务都应该专注于单一的业务功能,这样可以保持每个服务的代码库和部署单元的复杂性相对较低。

  2. 分布式部署:每个服务都可以独立开发、测试和部署,可以使用不同的技术栈和数据库。这样可以加快开发速度和灵活性,同时降低整个系统的风险。每个微服务可以有N多个实例,每个实例可以独立部署,处理客户端的请求。

  3. 松耦合和分散治理:微服务架构中各个服务之间通过API进行通信,使系统更加容易扩展和维护。同时,各个服务可以独立进行持续交付和部署,而不会影响整个系统。

应用案例:

  1. 电子商务平台:电子商务平台需要处理大量的交易和订单,以及用户管理、库存管理等功能。将这些功能划分为不同的微服务可以提高系统的可伸缩性和可靠性,同时使得团队能够并行开发和部署不同的服务。

  2. 社交媒体应用:社交媒体应用需要处理用户注册、登录、社交关系、消息推送等功能。使用微服务架构可以将这些功能划分为不同的服务,每个服务负责一个特定的功能,从而实现高度可扩展和灵活的系统。

  3. 酒店预订平台:酒店预订平台需要处理用户搜索、预订、支付、房态管理等功能。通过将这些功能划分为不同的服务,每个服务可以独立进行开发和部署,从而提高系统的可维护性和可靠性。

总而言之,微服务架构通过将应用程序分解为一组小型、松耦合的服务,实现了高度可伸缩性、可靠性和灵活性。它适用于各种应用领域,如电子商务、社交媒体、酒店预订平台等,可以提升开发效率并且降低系统风险。

2.3 C-分发风格

(1)C-发布-订阅架构(Publish-Subscribe Architecture)

发布-订阅架构(Publish-Subscribe Architecture)是一种消息传递模式,它通过解耦发布者(Publisher)和订阅者(Subscriber)来实现消息的传递和通信。以下是发布-订阅架构的概述和几个应用案例:

概述:

  1. 解耦消息发送者和接收者:发布-订阅架构中,发布者负责将消息发布到消息队列或主题中,而订阅者则从消息队列或主题中订阅感兴趣的消息。发布者和订阅者之间的通信是异步的,彼此之间相互解耦。

  2. 异步通信:在发布-订阅架构中,发布者和订阅者之间的通信是通过消息中间件实现的,实现了异步的消息传递。这意味着发布者和订阅者无需直接知道彼此的存在,从而提高了系统的可伸缩性和灵活性。

  3. 松耦合:发布-订阅架构通过消息的中间媒介实现发布者和订阅者之间的解耦,使系统更容易扩展和维护。新的发布者可以发布消息,而新的订阅者可以订阅感兴趣的消息,而不会影响已有的发布者和订阅者。

应用案例:

  1. 实时数据处理:在许多实时数据处理应用中,发布-订阅架构可用于实现消息的发布和订阅。例如,在电信领域,可以使用发布-订阅架构来处理实时的网络事件、日志数据和性能指标。

  2. 消息队列系统:发布-订阅架构广泛应用于消息队列系统,其中发布者将消息发布到消息队列中,而订阅者从队列中接收并处理这些消息。消息队列常用于解耦系统的各个组件,实现异步通信和削峰填谷。

  3. 实时通信应用:实时通信应用,如聊天应用、协同工具等,可以使用发布-订阅架构来实现消息的传递和通信。发布者将消息发布到特定的主题或频道中,而订阅者则订阅感兴趣的主题或频道,以接收相关的实时消息。

总结而言,发布-订阅架构通过解耦发布者和订阅者,实现了异步的消息传递和通信。它适用于各种应用场景,如实时数据处理、消息队列系统和实时通信应用。通过使用发布-订阅架构,可以实现系统的可伸缩性、灵活性和融合能力。

(2)C-事件驱动架构(Event-Driven Architecture)

事件驱动架构(Event-Driven Architecture)是一种基于事件和消息分布式架构风格,其核心思想是通过解耦应用程序的组件和服务来支持松散耦合和异步处理。

以下是事件驱动架构的概述和几个应用案例:

概述:

  1. 基于事件的通信:事件驱动架构通过事件和消息进行通信和协作。当特定事件发生时,应用程序将通过中间件将事件发送到一个或多个感兴趣的消费者。这样,每个组件和服务可以专注于自己的任务,且不会影响其他组件和服务的功能。

  2. 解耦架构:事件驱动架构实现了组件和服务之间的松散耦合。事件源可以发布事件,无论谁订阅和执行这些事件,而不需要事先了解谁可能会参与或何时参与。此外,事件驱动架构也可以简化应用程序的部署和维护,因为它分解了应用程序的各个组件,每个组件专注于处理自己的事件。

  3. 异步处理和大规模分布式:事件驱动架构适用于异步处理和大规模分布式消息处理场景。架构通过异步和松散耦合的方式来实现弹性处理和高可扩展性。

应用案例:

  1. 物联网设备控制:物联网设备需要实时响应传感器的数据。事件驱动架构可用于监控设备的状态,并触发适当的事件。基于这些事件,可以实现设备的自动控制和故障诊断。

  2. 金融交易处理:金融交易处理需要快速响应,同时还需要筛选和处理来自多个交易源的数据。事件驱动架构可用于监控和处理每个交易,提供实时交易预测和检测,同时保持高性能。

  3. 零售业务:零售业需要处理大量订购、发货和库存数据。事件驱动架构可用于处理每个订单、发货和退货,同时加速数据的处理和响应。

总而言之,事件驱动架构通过解耦应用程序的组件和服务来进行异步通信和协作,从而提高了应用程序的弹性、可伸缩性和可靠性。它适用于各种应用场景,如物联网设备控制、金融交易处理和零售业务。

2.4 D-虚拟机风格

(1)D-虚拟机风格-解释器:

(2)D-虚拟机风格-基于规则:

2.5 仓库风格

(1)E-仓库风格-数据库系统:

(2)E-仓库风格-超文本系统:

(3)E-仓库风格-黑板系统:

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

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

相关文章

vue项目下npm或yarn下安装echarts多个版本

最近在大屏展示的时候,用到了百度的echarts图表库,看完效果图后,又浏览了一下echarts官网案例,大同小异。但是搬砖过程中发现实际效果和demo相差甚远,一番折腾发现,项目中安装的是echarts4.x版本&#xff0…

nginx部署多个vue或react项目

下载nginx(tar.gz) nginx: download(官方地址) 部署nginx # 进入nginx压缩包所在目录 cd /usr/nginx# 解压 tar -zxvf nginx-1.25.3.tar.gz# 安装nginx的相关依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel# 生成Makefile可编译文件 cd /usr/ng…

7、Qt延时的使用

一、说明 平时用到两种延时方式QThread::sleep()和QTimer::singleShot() 1、QThread::sleep() QThread类中如下三个静态函数: QThread::sleep(n); //延迟n秒 QThread::msleep(n); //延迟n毫秒 QThread::usleep(n); //延迟n微妙 这种方式使用简单,但是会阻…

跨链原子交换

原子交换的想法于 2013 年首次在 BitcoinTalk 论坛上提出,它可以实现两个区块链之间的代币交换。 这些交换是原子的,因为双方要么收到对方的硬币,要么都保留自己的硬币。 一方不可能欺骗另一方。 它不依赖任何可信赖的第三方,消除…

3.Ansible的file模块,我最常用的文件操作

1.file 模块的用法 1.1 官方概念 Set attributes of files, symlinks or directories. Alternatively, remove files, symlinks or directories. Many other modules support the same options as the file’ module - including [copy], [template], and [assemble]. For Wi…

在idea中写sql语句,向数据库添加数据时,添加的字符串却显示???,解决方法

这是字符编码的问题 如何解决: 在idea的配置数据库的地方修改下边:mysql8版本和5版本差距不大。 在URL后加?useUnicodetrue&characterEncodingUTF8 例如 原来:String url “jdbc:mysql://localhost:3306/stu”; 改变后:St…

Git——工作区管理

如何管理工作目录,以便用户可以更高效地新建提交。如何在处理工作区和暂存区文件的过程中修复错误,以及如何修复最近一次提交记录中的问题;同时还会了解到如何安全地使用暂存机制和多个工作目录处理工作流中的中断问题。 主要内容有以下几点…

vue3高德地图使用,地址搜索,地址逆解析

在vue3项目里使用高德地图 高德地图文档 先在项目的index.html页面里添加一些东西 <script type"text/javascript">window._AMapSecurityConfig {securityJsCode: "xxxxxxxxxxxxx", //高德安全码};</script> <script src"https://…

认识JVM 一个Java文件的JVM之旅

准备 我是一个java文件&#xff0c;如何实现我的功能呢&#xff1f;需要去JVM(Java Virtual Machine)这个地方旅行。 变身 我高高兴兴的来到JVM&#xff0c;想要开始JVM之旅&#xff0c;它确说&#xff1a;“现在的我还不能进去&#xff0c;需要做一次转换&#xff0c;生成c…

Android问题笔记四十八:蓝牙obtainMessage数据传输部分数据丢失乱序问题

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分…

《算法通关村——解析堆在合并K个排序链表的应用》

《算法通关村——解析堆在合并K个排序链表的应用》 23. 合并 K 个升序链表 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2…

万界星空科技/仓库管理WMS系统/免费仓库管理系统

仓库管理&#xff08;仓储管理&#xff09;&#xff0c;指对仓库及仓库内部的物资进行收发、结存等有效控制和管理&#xff0c;确保仓储货物的完好无损&#xff0c;保证生产经营活动的正常进行&#xff0c;在此基础上对货物进行分类记录&#xff0c;通过报表分析展示仓库状态、…

esp32-s3部署yolox_nano进行目标检测

ESP32-S3部署yolox_nano进行目标检测 一、生成模型部署项目01 环境02 配置TVM包03 模型量化3.1预处理3.2 量化 04 生成项目 二、烧录程序 手上的是ESP32-S3-WROOM-1 N8R8芯片&#xff0c;整个链路跑通了&#xff0c;但是识别速度太慢了&#xff0c;20秒一张图&#xff0c;所以暂…

AI生成的图片有版权了

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 把发到小红书的AI图片搬运到百家号&#xff0c;然后被起诉了! 长知识了&#xff0c;原来AI生成的图片也有版权了&#xff0c;AI生成图片著作权第一案判了&#xff0c;这绝对是一件划时代事情&…

长沙电信大楼火灾调查报告发布:系烟头引发。FIS来护航安全

近日&#xff0c;长沙电信大楼的火灾调查报告引起广泛关注。调查发现&#xff0c;火灾是由未熄灭的烟头引发&#xff0c;烟头点燃了室外平台的易燃物&#xff0c;迅速蔓延至整个建筑。这起悲剧再次提醒我们&#xff0c;小小的疏忽可能酿成大灾难。但如果我们能及时发现并处理这…

sqli-labs靶场详解(less38-less45)

堆叠注入 ​ less-38 less-38 ?id1 and 11;%00 成功 ?id1 and 12;%00 失败 不是吧 这就出来了&#xff1f; ?id1 order by 4;%00 报错 4列不行 ?id0 union select 1,2,3;%00 显示位置为2,3 ?id0 union select 1,database(),3;%00 数据库为security ?id0 union select 1,…

人工智能 - 目标检测:发展历史、技术全解与实战

目录 一、早期方法&#xff1a;滑动窗口和特征提取滑动窗口机制工作原理 特征提取方法HOG&#xff08;Histogram of Oriented Gradients&#xff09;SIFT&#xff08;Scale-Invariant Feature Transform&#xff09; 二、深度学习的兴起&#xff1a;CNN在目标检测中的应用CNN的…

excel合并单元格教程

在表格里&#xff0c;总是会遇到一级表格、二级表格的区别&#xff0c;这时候一级表格会需要合并成一个大格子&#xff0c;那么excel如何合并单元格呢&#xff0c;其实使用快捷键或者功能键就可以了。 excel如何合并单元格&#xff1a; 1、首先我们用鼠标选中所有要合并的单元…

Vue 和 React 的优点分别是什么?如何选择?

目录 为什么我更喜欢Vue&#xff1f; 低代码平台的前端框架采用Vue的优势有哪些&#xff1f; JNPF-Web-Vue3 的技术栈介绍 &#xff08;1&#xff09;Vue3.x &#xff08;2&#xff09;Vue-router4.x &#xff08;3&#xff09;Vite4.x &#xff08;4&#xff09;Ant-D…

html/css中位置position的绝对位置absolute顺时针盒子案例图片排序

目标图片&#xff1a; Dreamweaver界面&#xff1a; 代码部分&#xff1a; <!doctype html> <html> <head> <meta charset"utf-8"> <title>无标题文档</title> <style type"text/css">.red{background-color:r…
最新文章