架构师必须了解的 5 种最佳软件架构模式

【系统架构】-什么是软件架构的5大风格 有哪几种软件架构风格 阅读详情

世界变得越来越依赖软件,软件系统已经渗透到了人类生活的方方面面,并带来了很多便利。从移动应用(用于和人联系),到医疗应用和深度学习模型,到金融技术系统,再到智能建筑(利用技术来自动化许多功能)。

 

为了提供所需的解决方案并获得最佳效果,必须使用恰当的架构来开发这些软件系统。

模式是特定于问题上下文的解决方案。

架构模式是针对特定环境中常见软件架构问题的通用且可重用的解决方案。

软件缺陷对组织业务有很大的影响。所有软件失败的主要原因都是选择了不恰当的软件架构模式,企业经常在没有正式架构的情况下启动应用程序开发。

然而,经常被忽视的一个事实是:缺少架构设计会迫使开发团队选择一个没有指导原则的典型模式。最终的方案将缺乏明确的角色、职责以及相互之间的依赖关系。

让我们看个简单的例子。

网上银行应用不需要像微服务范式那样复杂的设计。对于检索请求,创建一个客户端 - 服务器架构就够了。然而,如果没有这样的规划,应用程序就可能会变得复杂,而且没有办法回头,或者有可能在重构过程中损失大量的投资。

在本文中,我们将看看什么是软件架构模式,并对其中一些模式进行详细介绍。请记住,可以在单个系统中使用许多模式,用最好的设计来优化每一部分代码。

尽管我们称之为计算机科学,但它时常是一门艺术。

让我们来看看到底什么是软件架构模式。

1什么是应用架构模式?

考虑一个涉及营销 App 开发的软件项目。

要创建这个应用,必须首先确定其设计与架构,因为这是核心,应用的其余部分将以此为基础进行创建。例如,服务间将如何通信或支付集成将如何运转?如何用一个算法来推荐供应商的服务?诸如此类,不胜枚举。

几十年前,可以应对这些挑战的模式还很有限。然而,软件开发发展到现在,我们已经拥有了大量的架构模式,可以为不同类型的应用提供特定的好处。

软件架构模式是一般软件工程问题的重复性解决方案。在之前介绍的杂货店应用设想中,我们可以重用已经指定的产品建议算法,并对它们进行修改,以满足应用的需要。

用来实现推荐模块的软件架构只是整个架构模式的一部分。

现在,我们已经知道了什么是软件架构模式,让我们再看看为什么要使用它们。

2为什么要使用软件架构模式?

以下是软件开发公司在创建应用程序或软件时必须应用软件架构设计模式的三大原因:

  1. 构建更优的系统

使用架构模式,我们可以创建具有可转移性的模型。这些模型可以重复使用,这有利于形成一个可伸缩、可扩展的最优结构。

  1. 简化设计修改

取决于所使用的模式,大多数架构模式能够在开发的早期阶段进行修改,从而形成一个灵活、鲁棒、无错误的核心架构模式。

  1. 便于利益相关者沟通

软件架构模式是系统的基本抽象,利益相关者可以基于它进行沟通、协商,从而相互理解并达成共识。

现在,软件架构模式的意义已经明确,让我们来看 5 种流行的软件架构设计模式,以及可能应用在开发的什么地方。

35 种最佳软件架构模式

让我们看几种流行的软件架构模式,许多软件公司用它们开发应用和软件。

1. 分层软件架构

顾名思义,这种设计中的组件(代码)被划分为子任务层,多个层叠加在一起。这可能是最常见的策略。因为它通常是围绕数据库构建的,所以许多商业应用程序自然都将信息存储在表中。

这几乎是一个自我应验的预言。许多最流行、最好的软件框架,如 Java EE、Drupal 和 Express,在设计时都考虑到了这种结构。因此,用这些框架构建的许多应用程序自然具有了分层结构。

有时候,这被称为“N 层架构”。下面的设计总共包含 4 层。

  • 展现层:这是用户界面层,我们可以在这里查看以及向应用程序输入数据。
  • 业务层:这一层按照服务器请求执行业务逻辑。
  • 应用层:这一层是作为“展现层”和“数据层”之间桥梁。
  • 数据层:这一层使用数据库来管理数据集。

什么时候应该使用分层软件架构模式?

分层架构流行的原因有很多。我们可以从以下场景 / 需求来考虑:

  • 当开发人员较少而又要快速创建一个应用程序时。
  • 以可维护性和关注点分离作为架构基石的应用程序。
  • 必须遵守传统 IT 结构和流程的企业级应用程序。

分层架构模式适用于:

  • 亚马逊式的电商 Web 应用开发。
  • 一般桌面应用程序。

2. 微内核软件架构

微内核软件架构模式的另一个名称是插件式软件架构模式。通常,软件团队会在开发具有可替换组件的系统时使用。微内核模式由两个基本组件组成:

  • 核心系统处理应用程序最基本、最简单的操作。
  • 插件模块处理其他的功能以及做专门处理。

假如你已经成功开发了一个聊天应用程序。该应用程序的核心功能是,你可以与世界各地的人互发文本,而且不需要连接到互联网。一段时间后,你想在应用程序中添加语音信息功能,并实现了预期的功能。因为微内核模式允许以插件的形式添加功能,所以你才能够将这个功能添加到一个已经投入使用的程序中。

什么时候应该使用微内核架构模式?

  • 应用程序的基本例程和高阶规则之间有明确的边界。
  • 应用程序有一套固定的核心例程和一个必须定期更新的动态规则集。
  • 它非常适合分布式开发团队。

微内核架构模式适用于:

  • 基于产品的应用及调度应用。
  • 企业级应用,因为其所追求的适应性、可扩展性和可移植性。

3. 事件驱动软件架构

事件驱动架构是一种很灵活的方法。在这种架构中,软件服务或操作是由事件触发的。

那么,究竟什么是事件?

当用户在采用 EDA 构建的应用程序中执行一个动作时,会发生状态变化并产生一个反应,这个动作被称为事件。

在分层模式中,数据按照预定的顺序从一层传递到下一层。相比之下,事件驱动架构模式使应用程序模块能够在特定事件发生时做出反应。事件驱动模式分为两种类型:调停者拓扑(mediator topology)和代理者拓扑。

什么时候应该使用事件驱动架构模式?

  • 事件驱动模式最适合应用程序中的异步数据流系统。
  • 事件驱动模式可伸缩又可扩展。我们可以在不改变现有系统的情况下增加新的模块。
  • 开发人员可以使用此模式创建需要完美数据流的复杂应用程序或将逐渐增大的应用程序。

事件驱动架构模式适用于:

  • 构建 JavaScript 网站和电子商务网站。

4. 微服务软件架构

微服务软件架构模式构建相互独立但可以彼此通信的小型程序,以实现整个系统(应用程序)的正常运行。每个微服务都有自己特定的职责,每个团队可以独立地处理自己的微服务。

它们唯一的共同点就是通信。由于微服务相互通信,所以必须确保它们之间传递的消息向后兼容。

当应用程序采用微服务风格创建时,添加新特性和更新当前微服务,都不会影响其他微服务。使用微服务模式创建的模块是松耦合的。因此,它们易于理解、修改和扩展。

什么时候应该使用微服务架构模式?

  • 毫无疑问,微服务最适合那些希望以一种更可持续的方式重写其单体系统的团队。
  • 微服务最适合数据系统规模大且快速扩张的应用程序。
  • 开发团队分散在全球各地。

微服务架构模式适用于:

  • 组件数量不多的网站和边界明确的企业数据中心,比如 Netflix。

5. 基于空间的架构

创建基于空间的软件架构模式主要是为了解决和克服可扩展性和并发性的难题。对于并发用户数不断变化且不可预测的应用程序,它也是一种很好的设计模式。通过消除中央数据库限制,利用复制到内存中的数据网格获得高可扩展性。

基于空间的架构通过将处理和存储分布在多台服务器上,最大限度地减少高负载情况下的功能崩溃。

什么时候应该使用基于空间的架构模式?

  • 用于处理大量并发数据库访问或写入的应用程序和软件系统。
  • 必须处理可扩展性和并发性难题的应用程序。

基于空间的架构模式适用于:

 

  • 适合开发电子商务或社交网站,如 YouTube。

4选择最适合自己的架构模式

其他架构模式,如模型 - 视图 - 控制器模式、黑板模式、代理模式和事件 - 总线设计,在软件开发的不同方面也很有用。

对所有人来说,基本理念是一致的:定义应用程序的基本质量指标,改进产品功能,提高应用程序构建过程的速度和生产力。

希望这篇博文能帮助你了解软件架构模式的基础知识,以及它们最适合哪些应用程序,以便你可以选出最符合自己软件需求的应用程序。

Android 12 HAL开发避坑实录:手把手教你用AIDL在Native层实现一个可开机自启动的Service 本文详细介绍了在Android 12 HAL开发中,如何通过AIDL在Native层实现一个可开机自启动的Service。从环境准备、AIDL接口定义、服务实现到VINTF集成与SELinux策略配置,提供了完整的实战指南,帮助开发者避开常见陷阱,提升开发效率。 阅读详情

相关推荐

Vue项目实战:用DataV的dv-scroll-board打造高颜值滚动表格(附完整代码)

本文详细介绍了如何在Vue项目中使用DataV的dv-scroll-board组件打造高颜值滚动表格。从基础集成到高级配置,包括动态数据处理、深度样式定制、性能优化策略以及交互增强方案,帮助开发者快速实现企业级数据展示需求。特别针对样式优化和滚动表格的常见问题提供了实用解决方案。

weixin_30892037的博客 499

软件架构设计

系统设计是业务处理设计,而架构设计是设计一个机制和方案,让业务处理能够实现和落地。 架构设计填补了用户需求和系统设计之间的鸿沟。

左直拳的马桶_日用桶 1万+

通达信+大智慧数据同步存调DLL

数据同步存调DLL(通达信版+大智慧版)

guleba的博客 2053

如何设计软件架构:重要技巧和最佳实践

软件的适应性是由它在不使用迁移代码或类似工具的情况下响应变化的能力来定义的。实现这一目标的理想方法是让产品所有者和其他领域专家将它们总结为一组用户故事,这些用户故事提供有关参与者、先决条件、给定功能的潜在流程和其他元素的特定信息。一旦您选择了如何执行您的设计,您的架构设计的规划阶段就开始了。您可以通过为用户提供价值的方式创建此策略,并通过将您的体系结构分解成小块来正确规划您对开发资源的使用。您必须确定代表您的设计或项目计划的最大障碍的需求,而无需考虑实施太远。根据特定的假设或决定,某些标准可能是不可能的。

vvoennvv的博客 842

算法设计与分析 0-1背包问题 动态规划解法【超详细】

0-1背包问题 问题描述 给定i个物品和一个容量为的背包,物品的重量是Wi,其价值为Vi 物品个数为i,背包容量为C。 如何选择装入背包内的物品,使得装入背包中的物品的总价值最大? 其中,每种物品只有全部装入背包或不装入背包两种选择。 物品不能分割,不能重复使用。 动态规划算法思路 首先建立一个数组B[i][c],最上面一行表示背包容量,最左边一列表示物品编号,中间填充的数值表示当当前背包容量为C...

寒泉 4万+

手把手教你用UM982搭建厘米级RTK定位系统(附避坑指南)

本文详细介绍了如何使用UM982模组搭建厘米级RTK定位系统,涵盖硬件连接、软件配置和深度优化技巧。UM982支持BDS、GPS、GLONASS和Galileo等多系统全频点信号,特别适合精准农业、无人机导航等高精度应用场景。通过实战案例和避坑指南,帮助开发者快速实现厘米级定位精度。

y7z8a的博客 1410

五种常见软件架构风格

描述五种软件架构风格

孤独的探识者的博客 1万+

POWER(十一)charge pump原理

电荷泵是一种基于电容充放电原理的DC-DC转换电路,通过开关控制实现电压转换,包括升压、降压和负压输出。其核心是利用电荷守恒原理,通过电容存储和转移电荷来改变输出电压。典型拓扑结构包括倍压电路和多阶升压电路,具有结构简单、体积小等优势。关键参数包括转换效率、输出电流能力和开关频率,适用于芯片供电、显示屏驱动等低功耗场景。LVDS部分补充说明了自举电路在驱动电路中的应用及其自同步特性。

zhlwsh的博客 2816

软件架构设计风格

在软件系统的开发过程中,架构设计是决定系统可维护性、可扩展性、性能以及团队协作效率的关键环节。不同的架构设计风格为开发者提供了不同的组织方式和模块化策略,用以应对各种业务需求、技术挑战和演化目标。从传统的分层架构,到微服务、事件驱动、服务网格、黑板、无服务器架构等,每种架构风格都有其特定的适用场景与优势。理解这些架构风格的核心理念与适配条件,能够帮助我们更有策略性地做出技术选型,构建更加健壮、灵活和可演进的软件系统。

MCN的博客 1716

西门子S7-1200PLC控制步进电机的组态编程和具体步骤

西门子S7-1200PLC控制步进电机的组态编程和具体步骤 硬件准备: 1) 一个S7-1214C DC/DC/DC,订货号:6ES7 214-1AG40-0XB0 2) 一个86系的步进电机+相应的驱动器 3) 一个20A的西门子24V电源(步进驱动器及plc电源) 4) Portal V15版本 组态及编程: 1) 创建一个验证项目,添加cpu( S7-1214C),双击“工艺对象”,选择“运动控制”的TO_PositioningAxis V6.0版本,如下图所示: 2) “确定”后,系统自动生成名

Robot_PLC_HMI_Automation 1万+

Transformer实战(2)——循环神经网络详解

循环神经网络 (Recurrent neural networks, RNN) ,RNN 是在文本输入中广泛使用的神经网络。RNN 非常灵活,已被用于解决诸如语音识别、语言建模、机器翻译、情感分析和图像字幕等问题。RNN 利用输入的序列特性,序列输入可以是文本、语音、时间序列以及任何其他元素的出现取决于其前面元素的序列。在本节中,我们介绍了 RNN 及其变体,并学习如何使用 TensorFlow 进行实现。

盼小辉丶的博客 1万+

架构师必须了解的 5 种最佳软件架构模式,一文带你了解

考虑一个涉及营销App开发的软件项目。要创建这个应用,必须首先确定其设计与架构,因为这是核心,应用的其余部分将以此为基础进行创建。例如,服务间将如何通信或支付集成将如何运转?如何用一个算法来推荐供应商的服务?诸如此类,不胜枚举。几十年前,可以应对这些挑战的模式还很有限。然而,软件开发发展到现在,我们已经拥有了大量的架构模式,可以为不同类型的应用提供特定的好处。软件架构模式是一般软件工程问题的重复性解决方案。

程序源日志的博客 866

芒果YOLOv5改进05:损失函数IoU 篇之Repulsion Loss:原创改进损失函数 Repulsion:解决目标遮挡场景下检测,为解决密集人群检测中遮挡设计的损失函数,打造高效检测器涨点

YOLOv5改进代码实践|结合Repulsion 解决目标遮挡场景下检测🚀

包括YOLOv5、YOLOv7、YOLOv8等模型改进 4565

5种主要的软件架构模式

在全球软件架构峰会上,我们讨论了很多软件架构模式,因此我决定写一篇有关它的文章,重点介绍知名的软件架构师的见解。 什么是软件架构模式? 软件架构模式是经过验证的,具有良好设计结构的方法。更具体地说,架构模式是在实践中归纳总结的一组设计决策,具有明确定义的属性,并可以重复使用。 软件开发有时可以看作是选择,定制和组合架构模式的过程。软件架构师必须决定如何采用哪几种架构模式,如何使这些架构模式与软件系统特定的上下文相适应。 Mark Richards他写了一本书,名为《软件架构模式》,其中主要介绍了..

Javaesandyou的博客 2133

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

五大主流软件架构模式

首先,什么是软件架构模式? 架构模式是那些由软件架构师通过持续实践,进而总结出的、过往已验证的、优秀设计架构。它们往往能够被重复地使用到其他项目或领域之中。更具体地说,架构模式是需要在实践中反复发掘的一组设计决策。它具有明确定义的属性,以及一套可以被重复使用与描述的架构。 其实,开发软件架构可以被看作是针对模式进行选择、定制和组合的一整套过程。而软件架构师的任务就是要决定:如何实例化模式,如何使其与特定的上下文、以及问题的约束相适应。我们将在下文中进行详细的讨论。 Mark Richards在其著作-

skydust1979的博客 4488

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

软件架构--架构模式、特征

软件架构、模式和特征

and的博客 2039

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

通信接口主要的5种类型_5种主要的软件架构模式

译者:王延飞 译文链接:https://dzone.com/articles/5-major-software-architecture-patterns在全球软件架构峰会上,我们讨论了很多软件架构模式,因此我决定写一篇有关它的文章,重点介绍知名的软件架构师的见解。什么是软件架构模式?软件架构模式是经过验证的,具有良好设计结构的方法。更具体地说,架构模式是在实践中归纳总结的一组设计决策,具有明确定...

weixin_39983384的博客 2064

最佳软件架构书籍终极清单(2024 年)

它指导您确定消息发送、路由和监控策略。一本实用指南,适用于想要了解设计和部署数据密集型应用程序所涉及的原理和权衡的软件工程师和架构师。本书是为软件架构师、工程师和其他想要学习如何实现软件和组织现代化的专业人士编写的。它涵盖了软件架构的各个方面,从架构特征和模式到组件确定、图表和呈现架构、演化架构和软技能。该书由三位著名软件架构师撰写,并更新了 11 个新章节,涵盖了该领域的最新趋势,例如移动性、云、能源管理、DevOps 和量子计算。它是由经验丰富的软件架构师编写的,他们对现代软件开发的挑战有深入的了解。

极道Jdon的技术博客 1304

C#9 和 .NET5 软件架构(一)

本书涵盖了现代基于云和分布式软件架构中涉及的最常见设计模式和框架。它通过提供实际的现实场景,讨论了何时以及如何使用每种模式。本书还介绍了 DevOps、微服务、Kubernetes、持续集成和云计算等技术和流程,以便您可以开发并交付给客户最佳的软件解决方案。本书将帮助您了解客户想要的产品。它将指导您在开发过程中解决可能遇到的最大问题。它还涵盖了在云环境中管理应用程序时需要遵循的注意事项,以及您需要遵循的做和不做。

龙哥盟 1203

【尘缘赠书活动第四期】推荐几本架构师成长和软件架构技术相关的好书,助你度过这个不太景气的寒冬!

相信大家都对未来的职业发展有着憧憬和规划,要做架构师、要做技术总监、要做CTO。对于如何实现自己的职业规划也都信心满满,努力工作、好好学习、不断提升自己。相信成为一名优秀的架构师是很多程序员的目标,架构师的工作包罗万象,从开发基础框架到设计软件架构,从优化系统性能到修复重要Bug,从新技术选型到做出关键技术决策,从指导工程师开发到沟通、协调各种内外部关系。想要成为一个优秀的软件架构师,需要经过漫长的修炼,构建起自己的软件开发技术体系。但是一切看似纷繁复杂的技术技巧,均有其核心和基本的原理。

chen520的博客 3801

软件架构--架构设计的整体介绍

软件架构--架构设计的整体介绍1 介绍1.1 概述1.2 复杂系统1.3 架构目标1.4 架构过程(引用《系统架构:复杂系统的产品设计与开发》)1.5 系统预测方式经验实验建模推理1.6 设计工具UML1.7 架构师分类与能力要求微软架构师分类《职业成长的逻辑模型》对架构师的能力要求1.8 需求分析利益分析资源评估需求规范1.9 架构层级1.10 软件架构的发展史1.11 ​软件工程师的职业发展方向2 架构分析2.1 分类2.2 设计规范GRASP 9大原则信息专家(Information Expert)创

天道酬勤 7281
上一篇: 超赞:不愧是阿里内部“Spring boot学习笔记”从头到尾,全是精华
下一篇: 吃透Github上星标98.7k的性能优化方案优解,成功入职美团
跟着我学Java
博客等级 码龄6年 660粉丝 1341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值