2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

用示例程序介绍 CQRS 和事件溯源机制

  • 2015-06-16
  • 本文字数:1022 字

    阅读完需:约 3 分钟

Sacha Barber 在提升自己对 CQRS( Command Query Responsibility Segregation ) 设计所包含的架构和模式的理解过程中,决定构建一个包含事件溯源机制的CQRS 演示程序,并撰写了一篇文章解释内部工作机制。

Barber 是 Microsoft C# MVP ,他将 CQRS 描述为一种分离职责的设计,可以将没有副作用的查询类读操作和更改数据的写操作职责相互分离。他的示例中采用了 Vladimir Khorikov 早先定义的第三种CQRS 实现模式,对于读写职责均使用不同的模型和存储方式。Barber 将事件溯源定义为一种方法,应用将状态的变化存储为一系列事件,并且应用不仅仅只存储当前的状态。为了得到某个对象当前的状态,应用需要取回所有的事件,并在这个对象上顺序回放。这种方法,通过重放某一时点的事件并调整相关状态,来实现追溯应用过去的状态。

使用基于事件的写模型并将读写模型的存储分离,意味着写操作端的变化都需要通过事件机制在读模型中更新。这种更新以异步的方式执行,意味着写模式下的变化可能不会立刻在后续的读操作中反映出来,并且Barber 注意到应用程序当前是处于一种确保最终一致性的状态。基于此,他认为典型的CQRS 实现并不适用于请求返回类型的操作,客户期盼对请求都能有即刻正确的响应。因此,Barber 认为,那些从用户的角度去看,查询和写操作就相互明确区分的业务场景,更加适用于使用CQRS。

为了加深对CQRS 的理解,Barber 基于.Net 平台构建了一个完整的示例程序,包含了CQRS 的所有部分,并使用 RabbitMQ 消息队列实现事件溯源的异步机制,以此作为一种读写模型之间跨进程总线的交互方式。为了简化程序,他尽可能使用内存模型,包括事件的存储实现方式,这意味着程序多次运行之间的数据并不具备持久性。整个应用包含了一个命令总线、一个领域模型、一个写操作端的事件存储、一个事件总线和一个 NoSql 数据库,以及读操作端的事件处理器和一个数据访问层。

人们通常认为现成的 CQRS 框架会对应用实现 CQRS 设计造成障碍,但 Barber 考虑到自身对于 CQRS 经验欠缺,所以还是基于 CQRSlite 构建了示例程序,而 CQRSLite 是对早期 Greg Young 实现的 CQRS 框架的一个扩展。

查看英文原文: Introducing CQRS and Event Sourcing with a Demo Application


感谢丁晓昀对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-06-16 06:103876

评论

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

全国AI产品榜发布:百度文库蝉联第一

科技热闻

OpenHarmony专属的智能问答助手“小瓦AI答”上线了

极客天地

转换Html(富文本编辑器)到docx的Java工具类

alexgaoyh

html POI 转换 Web 富文本编辑器 docx

从云科技 “六边形战士” 数据基建“搬砖人”

从云科技

数据安全 数据基建 数据流通安

“新E代弯道王”MAZDA EZ-6亮相2024重庆国际车展

极客天地

从云科技入选《API安全市场指南报告》

从云科技

API 数据安全 从云科技

拯救学弟学妹计划之【论文帮手】是如何实现的?

AppBuilder

活动|NFTScan 联合 Google Cloud 香港举办线下交流活动

NFT Research

活动 Google Cloud NFTScan #Web3

2024年区块链技术开发全面解析:代币、DApp、NFT、链游与交易所的最新动态

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 代币开发

数据安全,让“藏粮于技”水到渠成

从云科技

物联网 数据安全 统一身份认证 零信任 数据流通

理解 Bearer Token 及其功能性

Apifox

后端 身份认证 Token API API 安全

宽睿数字平台兼容TDengine 等多种数据库,提供行情解决方案

TDengine

数据库 时序数据库

中小企业上本地MES还是云MES比较好?

万界星空科技

生产管理系统 mes 云mes 万界星空科技

文献解读-农业系列-第七期|《高粱驯化的基因组足迹和多种最终用途的育种选择》

INSVAST

基因数据分析 生信服务

你必须得认真体验下 TDengine Cloud 了!抢 600 元体验券

TDengine

数据库 tdengine

软件测试学习笔记丨Vue路由-Router

测试人

软件测试

如何更好的回答面试问题

老张

面试 面试经验

从学术到开源:探索北京邮电大学电子工程学院研究生的开源之旅

TDengine

数据库 时序数据库

电子标准院持续开展低代码开发平台能力评价工作

电子标准院软工研究室

低代码

针对PDF文档:印章、数字签名、编辑保护、PDF/A的Java工具类

alexgaoyh

数字签名 pdfbox PDF/A 电子印章 受保护禁止编辑

互联网政务应用指那些?怎么过等保?

行云管家

互联网 过等保 互联网政务

数据资产化浪潮来临,从云构筑数据资产安全基座

从云科技

数据安全 数字中国建设峰会 数据资产运营 数据安全一体机

高效处理风电时序数据,明阳集团的 TDengine 3.0 应用实录

TDengine

2024年吉林等级保护测评机构名单

行云管家

等级保护 等保测评 过等保 吉林

快准稳的文档解析工具,帮助构建性能优越的金融领域知识库问答产品

合合技术团队

金融 合合信息 智能问答 文档解析

得物SRE K8s 故障诊断:从 CPU 高负载到挂载泄露根源揭示

得物技术

Linux 容器 性能优化 稳定性 企业号2024年6月PK榜

星火闪耀,与AI同行丨华为开发者大会2024社区活动重磅上线!

华为云开发者联盟

华为云 华为云开发者联盟 华为开发者大会2024 企业号2024年6月PK榜

用示例程序介绍CQRS和事件溯源机制_语言 & 开发_Jan Stenberg_InfoQ精选文章