「软件架构」架构风格vs.架构模式vs.设计模式

简介: 「软件架构」架构风格vs.架构模式vs.设计模式



编程语言是如何发展的,以及它告诉我们的:它们总是朝着提供更多模块化和封装的方向发展。

在下面的文章中,我将介绍架构风格和架构模式的演变,所以今天我将介绍什么是架构风格,什么是架构模式

与软件开发中的许多术语一样,这些术语并不清楚,不同的人赋予它不同的含义。MSDN说,架构风格和架构模式是一样的,但就我个人而言,我更喜欢用George Fairbanks和Michael Keeling解释的方式来思考这些问题,在这个堆栈中所说的溢出答案以及Wikipedia是如何将两者分开的:关键区别在于范围。

同样重要的是要强调这样一个观点:架构风格、架构模式和设计模式不是相互排斥的,它们是互补的,它们都可以教会我们一些东西,尽管像往常一样,它们应该只在需要时才使用。

架构风格

架构风格和建筑风格类似,架构风格以非常宽泛的笔触告诉我们如何组织代码。它是最高级别的粒度,它指定应用程序的层、高级模块,以及这些模块和层之间如何交互,以及它们之间的关系。架构风格示例:

  • 基于组件
  • 整体应用
  • 分层的
  • 管道和过滤器
  • 事件驱动
  • 发布订阅
  • 插件
  • 客户端服务器
  • 服务导向

体系结构样式可以通过各种方式实现,包括特定的技术环境、特定的策略、框架或实践。

架构模式

模式是对反复出现的问题的反复解决方案。在架构模式的情况下,它们解决了与架构风格相关的问题。例如,“我们将拥有哪些类以及它们将如何交互,以便实现具有特定层集的系统”,或“我们面向服务的体系结构中将拥有哪些高级模块以及它们将如何通信”,或“我们的客户机-服务器体系结构将拥有多少层”。

体系结构模式对代码库有着广泛的影响,最常见的影响是水平地(即如何在层内构造代码)或垂直地(即如何将请求从外层处理到内层和内层)。架构模式示例:

  • 三层
  • 微内核
  • 模型视图控制器
  • 模型视图视图模型

设计模式

设计模式在其范围上不同于架构模式,它们更本地化,对代码库的影响更小,它们影响到代码库的特定部分,例如:

当我们只知道在运行时需要实例化什么类型(可能是工厂类)时,如何实例化对象;

如何使对象根据其状态(可能是状态机或策略模式)有不同的行为。

结论

正如我在这篇文章开头提到的,这一切都是关于范围的:

  • 架构风格是在最高抽象层次上的应用程序设计;
  • 架构模式是实现架构风格的一种方式;
  • 设计模式是解决局部问题的一种方法。

此外,模式可以同时用作架构模式或设计模式,这取决于我们在特定项目中使用它的范围。

来源

  • 2004 – Microsoft – Understanding Service-Oriented Architecture
  • 2009 – Microsoft – Microsoft Application Architecture Guide
  • 2010 – Stack Overflow – What’s the difference between Arch. Patterns and Arch. Styles?
  • 2014 – George Fairbanks – Architecture Patterns vs. Architectural Styles
  • 2017 – Wikipedia – List of software architecture styles and patterns
相关文章
|
2月前
|
设计模式 存储 前端开发
MVVM、MVC、MVP三种常见软件架构设计模式的区别
MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率。
74 12
|
26天前
|
人工智能 供应链 架构师
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
软件架构一致性问题之Serverless架构处理架构一致性问题如何解决
39 2
|
28天前
|
设计模式 存储 运维
微服务架构中的服务发现与注册中心设计模式
在现代软件工程实践中,微服务架构已成为构建灵活、可扩展系统的首选方案。本文将深入探讨微服务架构中至关重要的服务发现与注册中心设计模式。我们将从服务发现的基本原理出发,逐步解析注册中心的工作机制,并以Eureka和Consul为例,对比分析不同实现的优劣。文章旨在为开发者提供一套清晰的指导原则,帮助他们在构建和维护微服务系统时做出更明智的技术选择。
|
1月前
|
设计模式 监控 Java
探索微服务架构的弹性设计模式
【7月更文挑战第19天】在现代后端开发中,微服务架构因其灵活性、可扩展性而受到企业的青睐。本文将深入探讨微服务架构中的弹性设计模式,包括其定义、重要性以及如何通过技术手段实现服务的高可用性和容错性。我们将通过实例分析,展示如何在微服务系统中应用这些模式以提高系统的整体稳定性和响应能力。
29 1
|
2月前
|
设计模式 负载均衡 安全
探索微服务架构下的API网关设计模式
【6月更文挑战第14天】本文将深入探讨在微服务架构中,API网关的设计模式及其对系统性能和安全性的影响。通过分析不同的设计模式,我们将了解如何在保障服务高可用性和可扩展性的同时,确保系统的灵活性和响应速度。
|
3月前
|
架构师 微服务
什么是软件架构?架构的本质是什么?
定义 ”架构是什么“ 是件非常困难的事情,不同的组织对于软件架构有不同的定义,每个人心中也有自身对于系统架构定义的认知。就好比我们无法百分之百表述模型而只能产出模型不同维度的视图,对架构进行完备的定义是不可能的。
90 4
|
3月前
|
前端开发 Oracle 安全
软件架构设计 C/S与B/S架构的区别
C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle或SQLServer。
45 0
|
3月前
|
消息中间件 Kubernetes 供应链
软件体系结构 - 架构风格(14)SOA架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(14)SOA架构风格
69 0
|
3月前
|
存储 前端开发 Java
软件体系结构 - 架构风格(13)MVC架构风格
【4月更文挑战第21天】软件体系结构 - 架构风格(13)MVC架构风格
91 0
|
4天前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
设计模式-------------工厂模式之工厂方法模式(创建型)