架构模式和架构风格有什么区别?

56
在《软件架构-基础、理论和实践》这本书中,我可以找到这两个术语的定义。问题是我不明白它们在简单的英语中分别代表什么意思:

架构模式

架构模式是命名的一组架构设计决策,适用于重复性设计问题,并进行参数化以考虑该问题出现在不同软件开发环境中的情况。

架构风格

架构风格是一个命名的架构设计决策集合,(1)适用于给定的开发环境,(2)约束特定于该上下文中的特定系统的架构设计决策,并且(3)激发每个结果系统的有益品质。

每个术语的含义是什么?它们之间有什么区别?

1
这个问题应该迁移到软件工程网站。 - Sazzad Hissain Khan
12个回答

67

架构模式是解决反复出现的架构问题的一种方式。例如MVC解决了将UI与模型分离的问题。而Sensor-Controller-Actuator是一种模式,可以帮助您在面对几个输入感知时进行执行操作的问题。

相反,架构风格仅仅是给一个常见的架构设计命名。与模式相反,它不存在于"解决"问题。

Pipe&filter没有解决任何特定的问题,它只是一种组织代码的方式。客户端/服务器、主程序和子程序以及抽象数据类型/OO也是如此。

此外,单个架构可以包含多种架构风格,并且每种架构风格可以使用多种架构模式。


什么是循环架构设计?请给出一些例子。 - VINOTH ENERGETIC

18

架构风格是指设计和构建软件系统的一组准则或原则。

类别 架构风格
通信 面向服务的体系结构 (SOA)、资源导向的体系结构 (ROA)、消息总线
部署 客户端/服务器
领域 领域驱动设计、单体式、微服务
结构 基于组件、面向对象、分层、插件
其他 REST、点对点、云计算、物联网、区块链等...

架构模式是软件架构中特定、可重用的解决方案,用于解决常见问题或设计问题。

  • 例如:3层、N层、MVC、模型-视图-视图模型、发布-订阅、传感器-控制器-执行器等。

架构风格是系统整体结构的蓝图,而架构模式是系统特定部分的蓝图。

设计模式是面向对象软件设计中常见问题的通用可重用解决方案。它提供了如何在类和对象的层面上解决特定问题或设计问题的蓝图,而不是解决系统整体结构的问题。

  • 例如:工厂、单例、原型。

现实生活中的例子:寺庙的建筑风格可能相同,但内部设计可能会有所不同:

enter image description here


1
REST到底是一种架构模式还是一种通信机制? - Rob McCabe
这个答案把很多东西混淆了。我认为我在某个维基百科页面上看到了相同的信息。类别没有意义,因为所有提到的样式都属于它们。消息总线、Rest只是模式的一部分。 - Nithin B

15
坦白说,我一直认为这两个术语是同义词!而且相对于外行人(没有专业知识的人)的文献肯定把它们视作同义词。 可参考MSDN维基百科
然而,你的问题引起了我的兴趣,所以我进行了更多的调查,但实际上...我除了引用《企业架构实践指南》(Coad系列)外,找不到太多有用信息:

架构风格(Base等人1997年)和架构模式(Buschmann等人1996年)本质上是同义词。

根据进一步的谷歌搜索,我认为这可能是区分两者的一种可能方式:
  • 架构风格是系统创建/运行的概念方法。
  • 架构模式描述了在子系统或模块及其关系层面上实施风格的解决方案。
架构模式设计模式,例如适配器、观察者之间的区别在于它们应用的粒度级别(我知道这不是问题的一部分,但我认为这是相关的...)

+1 - 我认为你是正确的。模式定义得非常清晰,而架构风格似乎有点含糊不清,可能更高层次一些。 - Adrian K
1
如果你感兴趣的话,我在这个话题上做了一个新的回答,分享了我这学期软件设计课程所学到的内容。 - devoured elysium

7

简单来说:

  • 建筑风格

    是一个概念、理论(如何实现由你决定)。它也可以应用于软件世界之外。

    例如:REST(表述性状态转移)是一种基于特定原则、利用当前“Web”基础的建筑风格

  • 建筑模式

    描述了软件系统(或模块)层面上的解决方案。换句话说,它描述了各个部分之间的交互方式,例如视图与模型、模型与控制器之间的交互。

  • 设计模式

    是核心层面上的解决方案,它涉及到类、函数以及逻辑流程等内容。


3

架构风格

架构风格是对应用程序子系统的更广泛组织方式的名称,它描述了整体概念。例如,SOA客户端/服务器消息总线等。

架构模式

架构模式是可重复使用的解决一般架构问题的解决方案的名称,它提供了内部部分如何实现以解决这些问题的思路。例如,2层3层N层MVCREST等。

一个风格可以使用多个模式来解决多个问题。例如,客户端/服务器风格 可以使用 N层模式 或(和)MVC模式 来分离其 业务逻辑表示逻辑数据逻辑,从而引入模块化来解决 可修改性可维护性 问题。


3

在我看来,模式和架构风格是封装设计专业知识的互补机制。 架构风格提供了一组建筑块设计元素、组合建筑块的规则和约束以及分析和操作采用该风格创建的设计的工具。 架构风格通常为在特定领域构建广泛类别的架构提供指导和分析,而模式则专注于解决给定风格(或可能是多种风格)中更小、更具体的问题。


2

架构设计模式更具领域特定性,而架构风格更为通用,可在广泛的应用中使用。因此,架构模式需要更多的领域知识。


0

架构风格描述了一个由许多组件组成的系统。只有一种应用程序架构,您必须在所有地方应用一种架构风格,例如微服务、SOA和事件驱动架构。

架构模式描述了单个组件内部的某些内容,并不尝试在所有地方应用相同的架构模式,例如CQRS或DDD。


0

架构风格以非常宏观的方式告诉我们如何组织我们的代码。它是最高级别的粒度,指定了应用程序的层次结构、高级模块以及这些模块和层之间的交互关系和相互关系。架构风格的例子包括:基于组件的架构、面向服务的架构。

架构模式对代码库有广泛的影响,通常会水平地影响整个应用程序(例如,如何在一个层内部构造代码),或者垂直地影响整个应用程序(例如,如何将请求从外层处理到内层并返回)。架构模式的例子包括:模型-视图-控制器、模型-视图-视图模型。


0

架构模式 - 定义一组通用的元素类型及其相互作用。架构模式的示例包括管道和过滤器、模型-视图-控制器和反射。

架构风格 - 这个术语是由Garlan和Shaw创造的,它是系统组织的惯用模式。例如,客户端-服务器系统就是一种架构风格。

p.s:许多最初的架构风格已被重新制定为模式。


那么你的意思是管道和过滤器现在是模式了吗?因为我正在阅读的软件架构书中,明确将管道和过滤器列为一种风格。 - Sobiaholic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接