专业的编程技术博客社区

网站首页 > 博客文章 正文

一文读懂架构风格、架构模式与设计模式的区别

baijin 2024-09-03 10:12:07 博客文章 6 ℃ 0 评论

在软件工程中,架构风格(Architectural Style)架构模式(Architectural Pattern)设计模式(Design Pattern)是三个密切相关但又不完全相同的概念,它们各自在软件设计和开发过程中扮演着重要的角色。

重点摘要:

  1. 架构风格描述了系统的宏观结构。
  2. 架构模式描述了可重复使用的结构构建块模式,这些模式可在每种架构风格中使用来解决特定问题。以众所周知的 命令查询职责分离模式(CQRS) 为例,它描述了对数据库或事件系统的读写操作之间的结构分离。此架构模式可应用于任何架构风格,用于优化数据库查询和更新。
  3. 架构模式与设计模式(例如 Builder 设计模式)的不同之处在于,架构模式会影响系统的结构方面,而设计模式会影响源代码的设计方式。例如,您可以使用 Builder 设计模式来实现 CQRS 架构模式,然后使用 CQRS 模式作为微服务架构中的构建块。

什么是软件架构

定义:软件架构(Software Architecture)是指软件系统的整体结构和组织方式。它描述了软件系统的组件、模块、接口以及它们之间的关系。

软件架构可以被视为一个系统的草图,为设计大型软件系统提供指导。具体而言,软件架构定义了系统的各个组件、组件之间的相互作用、数据如何在这些组件之间流动,以及系统如何被划分为不同的层次或子系统。

一、架构风格(Architectural Style):系统的蓝图

定义:架构风格定义了系统宏观结构的高级模板,它描述了系统组件的组织方式、组件之间的交互方式以及它们如何协作来满足系统的质量属性要求。架构风格为软件系统提供了一个宽泛的设计蓝图,帮助开发者和架构师确定如何将系统分解为组件以及这些组件如何相互作用。

特点:

  • 它们是高层次的抽象,不涉及具体的实现细节。
  • 它们决定了系统的基本结构和行为。
  • 它们可以是单一的,也可以是混合的,以适应不同的业务需求。


想象一下,你要建造一座城堡,首先要决定的是它的整体布局和风格——是古典的欧式城堡,还是现代的玻璃幕墙建筑?这就是架构风格的选择。在软件工程中,架构风格定义了软件系统的基本组织结构和关键组件之间的交互方式,为整个系统提供了一个宏观的框架。

示例

  • 客户端-服务器(Client-Server):这是最经典的架构风格之一,用户通过客户端软件向服务器发送请求,服务器处理请求并返回结果。就像你通过浏览器访问网站,浏览器是客户端,网站服务器则处理你的请求。
  • 微服务(Microservices):近年来兴起的架构风格,它将大型应用拆分成一系列小的、自治的服务,每个服务独立运行、独立维护。这种风格提高了系统的可扩展性和容错性。

二、架构模式(Architectural Pattern):解决特定问题的框架

定义:架构模式是可以在多种架构风格中使用的、可复用的高级结构构建块模式。它们专注于解决特定问题或一组问题,如数据访问、安全性、并发控制等。架构模式通常在特定的架构风格内部应用,以优化或改进系统的某些方面。

特点:

  • 它们是针对特定问题的解决方案。
  • 它们可以在不同的架构风格中重用。
  • 它们影响系统的结构方面,而不是源代码的具体设计。

当你确定了城堡的蓝图(架构风格)后,接下来需要考虑的是如何具体构建它。架构模式就像是一套详细的建造指南,它针对特定类型的软件架构问题,提供了一套可复用的解决方案框架。

示例

  • 分层架构模式(Layered Architecture):分层架构也是一种架构风格,将系统划分为多个层次,如表示层、业务逻辑层、数据访问层等,每层只与相邻层交互。这种模式提高了系统的可维护性和可扩展性,就像城堡的不同功能区(如居住区、防御区)各司其职,互不干扰。
  • 事件驱动架构模式(Event-Driven Architecture):系统通过事件进行通信,组件之间不直接调用,而是发布和订阅事件。这种模式适用于需要高度解耦和异步处理的场景,比如社交媒体平台的通知系统。

在实践中,架构风格和架构模式之间的界限可能并不总是清晰的。一些概念可能在不同的上下文中既可以作为风格也可以作为模式来使用。例如,"Model-View-Controller"(MVC)通常被认为是一种架构模式,但在某些情况下,它也可以被视为一种架构风格,因为它为应用程序的分层提供了一种广泛接受的方法。

三、设计模式(Design Pattern):代码级别的复用与优雅

定义:设计模式是软件设计中常见问题的解决方案模板,它关注于更小的设计单元(如类、对象、接口等),旨在提高代码的可读性、可维护性和可重用性。设计模式就像是构建城堡时使用的各种工具和技巧,让建筑师能够更高效地完成任务。

特点:

  • 它们是解决特定设计问题的模板。
  • 它们关注于类和对象的结构和交互。
  • 它们是具体的,可以在多种情况下重用。

示例

  • 单例模式(Singleton):确保一个类只有一个实例,并提供一个全局访问点。就像城堡中的唯一一把钥匙,无论谁需要进入某个重要区域,都必须通过这把钥匙。
  • 工厂模式(Factory):用于创建对象的一种设计模式,它提供了一种创建对象的最佳方式,而无需指定具体类。就像城堡里的工匠车间,可以根据需求生产不同类型的武器或工具。

四、总结与区别

  • 架构风格:定义了系统的宏观结构和组件间的交互方式,是构建系统的蓝图。
  • 架构模式:针对特定类型的软件架构问题,提供了一套可复用的解决方案框架,比架构风格更具体。
  • 设计模式:关注于代码级别的复用与优雅,提供了解决常见设计问题的模板,是微观层面的设计指导。

架构风格可以由多个架构模式组成,架构模式可以进一步由多个设计模式实现。它们之间存在层次化的关系,共同协作以构建复杂的软件系统。在实际应用中,架构风格、架构模式和设计模式往往是相互交织和相互影响的。例如,一个架构模式可能需要使用特定的设计模式来实现。

这三者相辅相成,共同构成了软件架构的基石。作为软件架构新手,掌握这些概念将有助于你更好地理解和设计软件系统,让你的软件之旅更加顺畅和高效。


文章参考

https://www.oreilly.com/library/view/software-architecture-patterns/9781098134280/ch01.html

https://blog.bytebytego.com/p/ep68-top-architectural-styles

— END —

如需《Software Architecture Patterns, 2nd Edition》,请关注、后台留言。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表