写点什么

架构风格和架构模式速览

  • 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:528757
用户头像

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

关注

评论

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

区块链技术破解数字版权保护难题

CECBC

区块链 版权保护 数字技术

为什么Java二维数组不用指定列的长度

Rayjun

Java 数组

Google鼓励的13条代码审查标准 [建议收藏]

简爱W

Python 为什么能支持任意的真值判断?

Python猫

Python 编程

[翻译]Defer,Panic,and Recover

卓丁

defer panic recover Go 语言

职场求生攻略答疑篇之 3 —— 数据是土地

臧萌

数据 职场成长

Elasticsearch之mapping

北漂码农有话说

Flink从保存点启动应用-18

小知识点

scala 大数据 flink

为稳外贸保驾护航 区块链交易平台显身手

CECBC

区块链 银行 福费廷

宁波新基建之路 基于制造优势破题智慧发展

CECBC

新基建

Python 函数为什么会默认返回 None?

Python猫

Python 编程

Python 为什么没有 void 关键字?

Python猫

Python 编程

JavaScript 深拷贝与浅拷贝

梁凤波

智能商业时代的思考(一)从在线化到网络化

刘旭东

拼多多 淘宝 智能商业 网络协同

java安全编码指南之:声明和初始化

程序那些事

安全编码 java安全编码 编码指南 对象初始化

2020-09-03-第十三周作业

路易斯李李李

Python 中的数字到底是什么?

Python猫

Python 翻译 PEP

oeasy教您玩转linux010206toilet

o

一个在交流群里讨论过两轮的问题,答案竟然跟一个 PEP 有关

Python猫

Python 编程

区块链技术应用于链接智慧医疗

CECBC

区块链 社会保险 智能医疗

首个数字银行卡明年发行,广州出台区块链措施支持大湾区

CECBC

区块链 金融科技 社会

SpringBoot 缓存之常用注解

hepingfly

Java 缓存 springboot 注解

人生革命由自律发起

胡迪伦

自学编程 拖延症 懒惰 死循环

拥抱K8S系列-04-基于docker部署更多应用

张无忌

Docker 标准化 vsftpd

怎么向女朋友解释什么叫区块链?

艾小仙

比特币 区块链 以太坊 defi

商业通识 : 商业到底是什么?

Walker

学习 得到 个人成长 商业

如何将VSCode变成绿色版本

lmymirror

vscode 教程

【MySQL】我这样分析MySQL中的事务,面试官对我刮目相看!!

冰河

MySQL 面试 事务 隔离级别 冰河

持续集成有什么好处?快来看鸭

清菡软件测试

jenkins

妈妈,今天您几点下班?

脑极体

Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?

Python猫

Python 编程

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