写点什么

架构风格和架构模式速览

  • 2009-02-15
  • 本文字数:1080 字

    阅读完需:约 4 分钟

应用架构指南 2.0(微软模式和实践)的第 6 章讨论了诸如消息总线、分层架构、SOA 之类的架构风格。除了这些风格,还有很多架构模式,比如插件、点对点、发布 - 订阅。有些作者对架构风格、模式和隐喻进行了区分。

什么是架构风格呢?根据应用架构指南所说,架构风格指:

一组原则。你可以把它看成是一组为系统家族提供抽象框架的粗粒度模式。架构风格能改进分块,还能为频繁出现的问题提供解决方案,以此促进设计重用。

指南的作者列出了一系列架构风格:

架构风格 描述 客户端 - 服务器 将系统分为两个应用,其中客户端向服务器发送服务请求。 基于组件的架构 把应用设计分解为可重用的功能、逻辑组件,这些组件的位置相互透明,只暴露明确定义的通信接口。 分层架构 把应用的关注点分割为堆栈组(层)。 消息总线 指接收、发送消息的软件系统,消息基于一组已知格式,以便系统无需知道实际接收者就能互相通信。 N 层 / 三层架构 用与分层风格差不多一样的方式将功能划分为独立的部分,每个部分是一个层,处于完全独立的计算机上。 面向对象 该架构风格是将应用或系统任务分割成单独、可重用、可自给的对象,每个对象包含数据,以及与对象相关的行为。 分离表现层 将处理用户界面的逻辑从用户界面(UI)视图和用户操作的数据中分离出来。 面向服务架构(SOA) 是指那些利用契约和消息将功能暴露为服务、消费功能服务的应用。

这些架构风格分别适用于特定领域:

分类 架构风格 通信 SOA,消息总线,管道和过滤器 部署 客户端 / 服务器,三层架构,N 层架构 领域 领域模型,网关 交互 分离表现层 结构 基于组件的架构,面向对象,分层架构

J.D. Meier 从《企业架构实用指南》(由 James McGovern、Scott W. Ambler、Michael E. Stevens、James Linn、Vikas Sharan、Elias K. Jo 编著)一书中总结了几个要点,指出了架构风格和架构模式之间的细微差别

  • 架构风格是系统主要的、组织性的设计。
  • 架构模式从子系统或模块、及其之间的关系层次上描述了粗粒度的解决方案。
  • 系统隐喻则更为概念化,比起软件工程概念,它更多地涉及现实世界的概念。

David Calvert 在 1996 年给出了一份架构风格 / 模式的部分清单

  • 数据流系统——批处理,管道 - 过滤器。
  • 调用 - 返回系统——主程序和子程序,面向对象系统,分层。
  • 独立组件——通信过程,事件系统。
  • 虚拟机——解释器,基于规则的系统。
  • 以数据为中心的系统(仓库)——数据库,超文本系统,黑板。

其它比较现代的风格 / 模式还有:插件点对点无共享架构表述性状态转移(REST)、前端- 后端。在维基百科上有更为完整的列表

查看英文原文: A Quick Look at Architectural Styles and Patterns

2009-02-15 18:528576
用户头像

发布了 151 篇内容, 共 61.6 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

直面数字化挑战,戴尔PowerEdge R750最全面的通用服务器

科技热闻

MASA Framework 缓存入门与设计

MASA技术团队

.net MASA Framewrok MASA

HummerRisk V0.4.1发布:新增依赖文件检测功能,优化 AWS 检测规则组,优化资源态势等内容

HummerCloud

云计算 云安全 云原生安全 10月月更 安全合规

你真的了解过Vue的组件化开发吗🔥

渔戈

前端 Vue3 10月月更

Python列表和元组有什么区别

芥末拌个饭吧

后端 python 3.5+ 10月月更

软件测试 | 测试开发工程师必读经典好书清单

测试人

软件测试 测试开发 测试工程师 测试书籍

有奖测评 | 今天种下{1},明天就会收获一片{11.11}——程序员日暨11.11狂欢季来啦

京东科技开发者

云主机 测评 双十一 京东云 程序员日

2022年第六届数据质量管理国际峰会重磅开启

数据质量管理智库

数据 数据隐私 数据安全 峰会 数据质量

以指标驱动业务决策,Kyligence 亮相 Gartner IT Symposium/Xpo™ 峰会

Kyligence

数据分析 指标中台 OLAP技术

计算机网络 ,什么是Internet?什么是协议?TCP/UDP的区别以及优缺点 分组交换与电路交换的区别以及优缺点

Python-派大星

10月月更

Vue的开发模式与webpack🔥

渔戈

前端 Vue3 10月月更

阿里前端二面高频react面试题

beifeng1996

React

7 步保障 Kubernetes 集群安全

SEAL安全

Kubernetes 云原生 Kubernetes 集群 企业号十月 PK 榜 审计日志

输入到页面展现到底发生什么?

loveX001

JavaScript

三次握手与四次挥的问题,怎么回答?

loveX001

JavaScript

react的jsx和React.createElement是什么关系?面试常问

beifeng1996

React

React源码分析4-深度理解diff算法

goClient1992

React

软件测试 | 测试开发 | 测试开发工程师必读经典好书清单,抽奖赠书送福利!

测吧(北京)科技有限公司

测试

DOM,Diff算法与Key机制

beifeng1996

React

即时通讯技术文集(第3期):高性能网络编程系列 [共14篇]

JackJiang

网络编程 即时通讯IM

React源码分析3-render阶段(穿插scheduler和reconciler)

goClient1992

React

全彩LED显示屏近年来在中国的发展趋势

Dylan

LED显示屏 户外LED显示屏 led显示屏厂家

【kafka运维】Topic的生产和消费运维脚本

石臻臻的杂货铺

kafka kafka运维 10月月更

Go语言入门—06切片

良猿

Go golang 后端 10月月更

数通路由交换之网络基础(一)

Python-派大星

10月月更

常见的网路设备和网络参考模型,以及常见的网络层协议及数据通信过程

Python-派大星

10月月更

软件测试 | 测试开发 | 校招面试真题 | 显式等待与隐式等待的区别?与强制等待的方式分别是什么,有什么区别?

测吧(北京)科技有限公司

测试 测试开发

openGemini内核源码正式对外开源

华为云开发者联盟

数据库 物联网 华为云 企业号十月 PK 榜

Java中的super和this关键字详解

共饮一杯无

Java 10月月更 super和this关键字

《Go语言学习路线图》让你少踩坑,高效学,Let’s Go!

王中阳Go

golang 学习方法 技术专题合集 10月月更 “程”风破浪的开发者

前端经典面试题合集

loveX001

JavaScript

架构风格和架构模式速览_方法论_Abel Avram_InfoQ精选文章