编程语言是如何发展的,以及它告诉我们的:它们总是朝着提供更多模块化和封装的方向发展。
在下面的文章中,我将介绍架构风格和架构模式的演变,所以今天我将介绍什么是架构风格,什么是架构模式。
与软件开发中的许多术语一样,这些术语并不清楚,不同的人赋予它不同的含义。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