BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

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

| 作者 Jan Stenberg 关注 33 他的粉丝 ,译者 邵思华 关注 3 他的粉丝 发布于 2015年9月6日. 估计阅读时间: 3 分钟 | 都知道硅谷人工智能做的好,你知道 硅谷的运维技术 也值得参考吗?QCon上海带你探索其中的奥义

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

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT