「软件架构」架构风格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
目录
打赏
0
0
0
0
110
分享
相关文章
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
分布式系统架构5:限流设计模式
本文是小卷关于分布式系统架构学习的第5篇,重点介绍限流器及4种常见的限流设计模式:流量计数器、滑动窗口、漏桶和令牌桶。限流旨在保护系统免受超额流量冲击,确保资源合理分配。流量计数器简单但存在边界问题;滑动窗口更精细地控制流量;漏桶平滑流量但配置复杂;令牌桶允许突发流量。此外,还简要介绍了分布式限流的概念及实现方式,强调了限流的代价与收益权衡。
104 11
分布式系统架构4:容错设计模式
这是小卷对分布式系统架构学习的第4篇文章,重点介绍了三种常见的容错设计模式:断路器模式、舱壁隔离模式和重试模式。断路器模式防止服务故障蔓延,舱壁隔离模式通过资源隔离避免全局影响,重试模式提升短期故障下的调用成功率。文章还对比了这些模式的优缺点及适用场景,并解释了服务熔断与服务降级的区别。尽管技术文章阅读量不高,但小卷坚持每日更新以促进个人成长。
72 11
深入理解微服务架构:设计模式与实践
【10月更文挑战第19天】介绍了微服务架构的核心概念、设计模式及最佳实践。文章详细探讨了微服务的独立性、轻量级通信和业务能力,并介绍了聚合器、链式和发布/订阅等设计模式。同时,文章还分享了实施微服务的最佳实践,如定义清晰的服务边界、使用API网关和服务发现机制,以及面临的挑战和职业心得。
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
560 37
架构视角下的NHibernate:设计模式与企业级应用考量
【10月更文挑战第13天】随着软件开发向更复杂、更大规模的应用转变,数据访问层的设计变得尤为重要。NHibernate作为一个成熟的对象关系映射(ORM)框架,为企业级.NET应用程序提供了强大的支持。本文旨在为有一定经验的开发者提供一个全面的指南,介绍如何在架构层面有效地使用NHibernate,并结合领域驱动设计(DDD)原则来构建既强大又易于维护的数据层。
60 2
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
59 2
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
android MVP契约类架构模式与MVVM架构模式,哪种架构模式更好?
125 0
微服务架构中的服务发现与注册中心设计模式
在现代软件工程实践中,微服务架构已成为构建灵活、可扩展系统的首选方案。本文将深入探讨微服务架构中至关重要的服务发现与注册中心设计模式。我们将从服务发现的基本原理出发,逐步解析注册中心的工作机制,并以Eureka和Consul为例,对比分析不同实现的优劣。文章旨在为开发者提供一套清晰的指导原则,帮助他们在构建和维护微服务系统时做出更明智的技术选择。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等