架构模式
架构模式是命名的一组架构设计决策,适用于重复性设计问题,并进行参数化以考虑该问题出现在不同软件开发环境中的情况。
架构风格
每个术语的含义是什么?它们之间有什么区别?架构风格是一个命名的架构设计决策集合,(1)适用于给定的开发环境,(2)约束特定于该上下文中的特定系统的架构设计决策,并且(3)激发每个结果系统的有益品质。
架构模式是命名的一组架构设计决策,适用于重复性设计问题,并进行参数化以考虑该问题出现在不同软件开发环境中的情况。
每个术语的含义是什么?它们之间有什么区别?架构风格是一个命名的架构设计决策集合,(1)适用于给定的开发环境,(2)约束特定于该上下文中的特定系统的架构设计决策,并且(3)激发每个结果系统的有益品质。
架构模式是解决反复出现的架构问题的一种方式。例如MVC解决了将UI与模型分离的问题。而Sensor-Controller-Actuator是一种模式,可以帮助您在面对几个输入感知时进行执行操作的问题。
相反,架构风格仅仅是给一个常见的架构设计命名。与模式相反,它不存在于"解决"问题。
Pipe&filter没有解决任何特定的问题,它只是一种组织代码的方式。客户端/服务器、主程序和子程序以及抽象数据类型/OO也是如此。
此外,单个架构可以包含多种架构风格,并且每种架构风格可以使用多种架构模式。
架构风格是指设计和构建软件系统的一组准则或原则。
类别 | 架构风格 |
---|---|
通信 | 面向服务的体系结构 (SOA)、资源导向的体系结构 (ROA)、消息总线 |
部署 | 客户端/服务器 |
领域 | 领域驱动设计、单体式、微服务 |
结构 | 基于组件、面向对象、分层、插件 |
其他 | REST、点对点、云计算、物联网、区块链等... |
架构模式是软件架构中特定、可重用的解决方案,用于解决常见问题或设计问题。
架构风格是系统整体结构的蓝图,而架构模式是系统特定部分的蓝图。
设计模式是面向对象软件设计中常见问题的通用可重用解决方案。它提供了如何在类和对象的层面上解决特定问题或设计问题的蓝图,而不是解决系统整体结构的问题。
现实生活中的例子:寺庙的建筑风格可能相同,但内部设计可能会有所不同:
根据进一步的谷歌搜索,我认为这可能是区分两者的一种可能方式:架构风格(Base等人1997年)和架构模式(Buschmann等人1996年)本质上是同义词。
架构风格是对应用程序子系统的更广泛组织方式的名称,它描述了整体概念。例如,SOA
、客户端/服务器
、消息总线
等。
架构模式是可重复使用的解决一般架构问题的解决方案的名称,它提供了内部部分如何实现以解决这些问题的思路。例如,2层
、3层
、N层
、MVC
、REST
等。
一个风格可以使用多个模式来解决多个问题。例如,客户端/服务器风格 可以使用 N层模式 或(和)MVC模式 来分离其 业务逻辑、表示逻辑 和 数据逻辑,从而引入模块化来解决 可修改性
和 可维护性
问题。
在我看来,模式和架构风格是封装设计专业知识的互补机制。 架构风格提供了一组建筑块设计元素、组合建筑块的规则和约束以及分析和操作采用该风格创建的设计的工具。 架构风格通常为在特定领域构建广泛类别的架构提供指导和分析,而模式则专注于解决给定风格(或可能是多种风格)中更小、更具体的问题。
架构设计模式更具领域特定性,而架构风格更为通用,可在广泛的应用中使用。因此,架构模式需要更多的领域知识。
架构风格描述了一个由许多组件组成的系统。只有一种应用程序架构,您必须在所有地方应用一种架构风格,例如微服务、SOA和事件驱动架构。
架构模式描述了单个组件内部的某些内容,并不尝试在所有地方应用相同的架构模式,例如CQRS或DDD。
架构风格以非常宏观的方式告诉我们如何组织我们的代码。它是最高级别的粒度,指定了应用程序的层次结构、高级模块以及这些模块和层之间的交互关系和相互关系。架构风格的例子包括:基于组件的架构、面向服务的架构。
架构模式对代码库有广泛的影响,通常会水平地影响整个应用程序(例如,如何在一个层内部构造代码),或者垂直地影响整个应用程序(例如,如何将请求从外层处理到内层并返回)。架构模式的例子包括:模型-视图-控制器、模型-视图-视图模型。
架构模式 - 定义一组通用的元素类型及其相互作用。架构模式的示例包括管道和过滤器、模型-视图-控制器和反射。
架构风格 - 这个术语是由Garlan和Shaw创造的,它是系统组织的惯用模式。例如,客户端-服务器系统就是一种架构风格。
p.s:许多最初的架构风格已被重新制定为模式。