写点什么

Dino Esposito 对于 CQRS、消息以及事件的看法

2015 年 9 月 05 日

Dino Esposito 在 MSDN 杂志上所发表的三篇系列文章中表示:命令查询职责分离(CQRS)架构是系统架构变革的一个起点,它将对整个架构带来深远的影响。CQRS 是软件架构师的设计理念从“需要持久化的模型”逐渐演变为“需要进行日志记录的事件”的第一步。在他看来,软件架构在今后数年将成为人们的主要关注点,而主要的数据源将来自于基于事件的数据,而不是数据的快照。

Esposito 从 2006 年至今一直保持着微软MVP 的荣誉,他将CQRS 描述为能够区分修改状态的代码与读取状态的代码的一种设计风格。他强调说:一旦认识到命令与查询是两种截然不同的操作,对于软件架构设计的想法就可能带来重大的影响,系统的每个部分都会变得更容易理解与编码。其中命令部分将关注于业务规则,而查询部分则只需要考虑如何返回数据。两者各自的处理管道也能够进行分别优化,而不会产生破坏对方的功能的风险。CQRS 的最基本形式是在一个数据库中实现读写分离,但也存在着一些更高级的表现形式,Vladimir Khorikov 曾专门撰文讨论过这一话题。

Esposito 也表示,许多开发者倾向于仅在具有高度协作性以及大规模的应用中使用 CQRS。但在他看来,无论系统表现出怎样的复杂度,这种软件开发方式都能够体现出其价值所在。虽然在具有高度复杂性的业务中,CQRS 能够更好地表现出其优势,但他认为即使在一些普通的应用,例如基于 CRUD 的应用中,CQRS 同样也是一种简单而强大的模式。

Esposito 认为,基于消息的架构的主要优势在于:在支持一些新的用户场景时,它能够简化对复杂性的管理以及业务工作流的变更。他也提到,如果不使用 CQRS 而打造一个基于消息的系统是非常困难、甚至是不可能的。通过使用领域事件,可以将工作流建模为一个个独立的操作(由命令触发)以及事件。通过创建处理器对命令以及后续的事件进行处理,整个工作流就被分解为多个小步骤,从而简化工作流的变更。

Esposito 注意到 CRUD 系统的一个特征在于数据总是以快照的形式保存起来的,亦即最近的已知系统状态,而这一点往往被人忽略。如果客户提出了某个特性,需要获得应用在过去某个阶段的状态,那么仅仅保存快照数据是无法满足这一需求的。在他看来,这种情况下唯一的解决方案就是重新修改系统的架构,让它保存领域事件,并保存整个领域中所有的变更记录。将数据保存为事件能够降低数据的抽象级别,设计者就有机会将相同的数据用于不同的目的,包括单纯的查询、商业智能以及系统使用情况分析。

查看英文原文: Dino Esposito on CQRS, Messages and Events

2015 年 9 月 05 日 19:001287
用户头像

发布了 428 篇内容, 共 148.4 次阅读, 收获喜欢 20 次。

关注

评论

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

LeetCode题解:127. 单词接龙,BFS+统计单词变化次数,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

EZYTRX波场智能合约APP系统软件开发

开發I852946OIIO

系统开发

dubbogo 3.0:牵手 gRPC 走向云原生时代

阿里巴巴云原生

go gRPC 云原生 中间件 dubbo-go

为了SpringBoot提交Tomcat执行,我总结了这么多

小Q

tomcat 学习 面试 微服务 springboot

智慧警务可视化平台开发,重点人员管控系统搭建

t13823115967

智慧公安 智慧警务系统开发

朋友突然从某度外包人员摇身一变成为大厂架构师,在我的死缠烂打下他说出了自己的秘密武器。

Java成神之路

Java 程序员 架构 面试 编程语言

Prometheus TSDB(Part 2):预写日志(WAL)和检查点

_why先生

云原生 Prometheus tsdb 可观察性

《大数据算法》.pdf

田维常

算法

腾讯高工强烈推荐的“Netty速成手册”原理+应用+调优,带你将知识点一网打尽

比伯

Java 编程 程序员 架构 Netty

智慧社区系统开发方案,智慧平安小区综合管理系统建设

WX13823153201

智慧社区系统开发

什么是全场景AI计算框架MindSpore?

华为云开发者社区

人工智能 AI mindspore

硬肝到秃头!Alibaba强推并发编程笔记我跪了,真的学到好多东西!

Java架构追梦

Java 学习 架构 面试 并发编程

从 JMM 透析 volatile 与 synchronized 原理

码哥字节

volatile JVM JMM Java 25 周年 synchronized

将原则纳入到架构的生命中

soolaugust

架构 思考 设计

好久不见!这份Spring全家桶、Docker、Redis架构大礼包免费赠送

Java架构之路

Java 程序员 架构 面试 编程语言

80%Java开发者面试都问的SpringBoot你竟不会?看完这些笔记足以

Java架构之路

Java 程序员 架构 面试 编程语言

答了Mybatis这个问题后,面试官叫我回去等通知……

田维常

mybatis

熟练掌握Spring Cloud已然成为Java工程师的面试门槛,简历上没写熟悉掌握微服务连面试机会都难得!

Java成神之路

Java 程序员 架构 面试 编程语言

解析字节算法面试真题,深入探究ArrayList应用原理

小Q

Java 学习 编程 架构 面试

面试被问高并发一脸懵?那是你没看过我整理得高并发回答模板

小Q

Java 学习 面试 高并发 性能调优

盘点2020 | 疫情下的思考和学习

soolaugust

盘点2020

智慧城市建设,社区智能化系统搭建解决方案

t13823115967

智慧城市 平安小区

IDEA 文档插件 DocView 版本更新:修改 UI 并支持 IDEA 2020.3 !

程序员小航

idea插件 IntelliJ IDEA 文档生成

一文带你彻底了解大数据处理引擎Flink内存管理

华为云开发者社区

大数据 数据 处理

4年Java开发经验裸辞之后闭关修炼2个多月,成功拿下美团、京东、字节跳动(Java架构师)offer。

Java成神之路

Java 程序员 架构 面试 编程语言

《码出高效:Java 开发手册》“码” 出高效的同时编写出高质量的代“码”。PDF文档资料免费开放下载!

Java成神之路

Java 程序员 架构 面试 编程语言

从源码的角度搞懂 Java 动态代理!

Java架构师迁哥

产品策略闭环是个什么环?

万事ONES

项目管理 团队协作 需求管理 需求分析 产品策略

五年开发经验裸辞之后投递简历,收到阿里面试邀请四面成功斩获offer,特分享本次阿里面经希望对大家有所帮助。

Java成神之路

Java 程序员 架构 面试 编程语言

我和阿里P7差的不是薪资?而是Redis+微服务+Nginx+MySQL+Tomcat

Java架构之路

Java 程序员 架构 面试 编程语言

耗时一个月整理的97道大厂Java核心面试题出炉,精心整理,无偿分享

Java架构之路

Java 程序员 架构 面试 编程语言

InfoQ 极客传媒开发者生态共创计划线上发布会

InfoQ 极客传媒开发者生态共创计划线上发布会

Dino Esposito对于CQRS、消息以及事件的看法-InfoQ