Su的技术博客

  • 首页
  • 原创
  • 视频
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
    • AI工具集
    • 工具清单
    • JSON在线格式化
    • JSON在线比较
    • SQL在线格式化
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. 架构方案
  3. 正文
                           

【架构】4.架构风格 vs. 架构模式 vs. 设计模式(译)

2023-09-01 2500点热度 0人点赞 0条评论

原文:https://herbertograca.com/2017/07/28/architectural-styles-vs-architectural-patterns-vs-design-patterns/

这篇文章是软件架构编年史(译)的一部分,这部编年史由一系列关于软件架构的文章组成。在这一系列文章中,我将写下我对软件架构的学习和思考,以及我是如何运用这些知识的。如果你阅读了这个系列中之前的文章,本篇文章的的内容将更有意义。

在上一篇文章中,我回顾了编程语言的发展史,它告诉我们:编程语言始终都在向着更好的模块化和封装性演进。

在接下来的文章里,我将记述架构风格和架构模式的演进史。所以,今天这篇文章的内容是架构风格和架构模式的定义。

和许多软件开发术语一样,这些词语也很模糊,而且不同的人有着不同的理解。MSDN 上架构风格和架构模式是一样的,但我个人更认同 George Fairbanks 和 Michael Keeling的解释和 Stack overflow 上的答案 ,以及维基百科上对两个概念的区分:关键的区别是范围。

还有一点需要强调的是架构风格、架构模式和设计模式并不是完全毫不相关的,它们互相补充而且都能指导我们,尽管,和往常一样,它们应该只在必要时使用。

架构风格

架构风格非常粗略地告诉我们应该如何组织代码。它的粒度比较大,说明了应用的分层和高层级的模块,这些模块和层次之间如何交互,以及它们的关系。架构风格的例子有:

  • 基于组件
  • 单体应用
  • 分层
  • 管道和过滤器
  • 事件驱动
  • 发布订阅
  • 插件
  • 客户端服务器
  • 面向服务

架构风格可以有多种实现方式,拥有特定的技术环境以及特定的策略、工具和实践。

架构模式

解决反复出现的问题的常见方案就是模式。架构模式解决的就是和架构风格相关的问题。例如,“要实现一个特定层次组合的系统,我们需要哪些类,它们又如何交互”,或者“我们的面向服务架构中需要多少高层级的模块,而它们应该如何通信”,又或者“我们的客户端服务器架构要分成多少个物理层”。

架构模式对代码的影响相当大,通常会横向地(比如,如何组织同一个层次中的代码)或者纵向地(比如,请求是如何从外层进入到内层处理之后再返回的)影响整个应用。架构模式的例子有:

  • 三层(tier)
  • 微内核
  • MVC
  • MVVM

设计模式

设计模式作用的范围和架构模式不同,它们更局限一些,它们对影响的是代码中某个肯定的部分,对代码的组织影响不多。例如:

  • 在运行时只知道需要实例化的类型的情况下,如何实例化一个对象(是不是用工厂类?);
  • 对象如何根据它的状态表现不同的行为(是不是用状态机或者策略模式?)。

总结

正如文章开头所言,这全部关乎于范围:

  • 架构风格是最高抽象级别的应用设计; An Architectural Style is the application design at the highest level of abstraction;
  • 架构模式是实现架构风格的一种方式; An Architectural Pattern is a way to implement an Architectural Style;
  • 设计模式是解决局部问题的方法。 A Design Pattern is a way to solve a localised problem.

此外,模式既可以用作指定对象的架构模式也可以用作它的设计模式,还是根据我们使用它的范围而定。

引用来源

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

本文仅供学习!所有权归属原作者。侵删!文章来源:作者 https://www.jianshu.com/p/d8dce27f279f

更多文章:

  1. 生产环境JVM崩溃问题排查解决
  2. 全链路压测之影子库及ShardingSphere实现影子库源码剖析
  3. 系统设计入门:成为高级软件工程师的指南
  4. 如何画好一张架构图?
  5. 2.软件架构预述(译)
  6. 你所说的“事件驱动”是什么? What do you mean by “Event-Driven”?
  7. JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇(长文)
  8. 7. MVC及其变种(译)
  9. 企业4A架构:业务、应用、数据、技术的完美融合
  10. 6.分层架构(译)
标签: 架构 设计模式 架构模式 架构风格 系统架构
最后更新:2023-09-01

coder

分享干货文章,学习先进经验。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

广告
文章目录
  • 架构风格
  • 架构模式
  • 设计模式
  • 总结
  • 引用来源
最新 热点 推荐
最新 热点 推荐
微服务架构:必懂的6大性能维度 Anthropic Code with Claude 开发者大会:开启 AI Agent 新时代 视频笔记-微服务架构P4:必懂5种设计模式 视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构 干货 | 论Elasticsearch数据建模的重要性 马蜂窝消息总线——面向业务的消息服务设计 基于 MySQL Binlog 实现可配置的异构数据同步 视频笔记:Google发布Agent2Agent协议
视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构干货 | 论Elasticsearch数据建模的重要性视频笔记-微服务架构P4:必懂5种设计模式Anthropic Code with Claude 开发者大会:开启 AI Agent 新时代微服务架构:必懂的6大性能维度
视频笔记:什么是微服务,为什么是微服务? 干货 | 论Elasticsearch数据建模的重要性 Elasticsearch 使用误区之六——富文本内容写入前不清洗 Netflix 技术栈 大型系统架构重构10步法 二级缓存架构极致提升系统性能 Eureka源码之二:服务注册 马蜂窝消息总线——面向业务的消息服务设计

CRUD (1) Event Sourcing (1) graphql (1) id (1) NoSQL (1) quarkus (1) rest (1) RocketMQ (2) Spring Boot (1) zk (1) zookeeper (1) 上下文 (1) 事务消息 (1) 二级缓存 (1) 值对象 (1) 关系数据库 (1) 分布式缓存 (1) 原子性 (1) 唯一ID (1) 商品 (1) 多对多 (1) 子域 (1) 字符集 (1) 客户端心跳 (1) 幂等 (2) 干货 (1) 并发 (1) 应用场景 (1) 应用架构图 (1) 康威定律 (2) 异步复制 (1) 微服务架构 (3) 总体方案 (1) 技术方案 (2) 技术架构 (2) 技术架构图 (1) 技能 (1) 持续集成 (1) 支撑域 (1) 故障恢复 (1) 数据架构图 (1) 方案选型 (1) 日记 (1) 服务发现 (1) 服务治理 (1) 服务注册 (2) 机房 (1) 核心域 (1) 泄漏 (1) 洋葱架构 (1) 消息队列 (5) 源码剖析 (1) 灰度发布 (1) 熔断 (1) 生态 (1) 画图工具 (1) 研发团队 (1) 线程 (2) 组织架构 (1) 缓存架构 (1) 编码 (1) 视频 (20) 读写分离 (1) 贵州 (1) 软件设计 (1) 迁移 (1) 通用域 (1) 集群化 (1) 雪花算法 (1) 顺序消息 (1)

推荐链接🔗
  • AI工具集
  • 工具箱🛠️

COPYRIGHT © 2014-2025 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2