AICon 北京站 Keynote 亮点揭秘,想了解 Agent 智能体来就对了! 了解详情
写点什么

用示例程序介绍 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:103886

评论

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

优化YashanDB查询逻辑提高响应速度

数据库砖家

流批一体向量化引擎Flex

Apache Flink

大数据 flink 流批一体

IPv6检测指标中的IPv6授权体系是什么意思?(国科云)

国科云

感谢艾瑞白皮书“点名”,但网易的挖掘机器人真不是“打游戏送的”

网易伏羲

数字孪生 人机协作 网易伏羲 工程机械

Ableton Live 12 Suite v12.2中文版注册机+许可证

Rose

基于生成式物理引擎的AI模型训练方法论

申公豹

人工智能

简单了解一下数据安全定义以及意义

行云管家

网络安全 数据安全 堡垒机

ZAB 与 Paxos:分布式一致性算法的工程实践与深度对比

异常君

zookeeper 分布式 ZAB PAXOS Java.

Ae/Pr/视觉特效和转场BCC插件 Boris FX Continuum 2023亮点功能

Rose

怎样做用YashanDB构建企业统一数据管理平台?

数据库砖家

Hype 4 Pro 4.1.19 - 创建动画和交互式的Web内容

Rose

3D数字绘画和雕刻 Mudbox 2025新功能

Rose

苹果访达Finder增强工具TotalFinder 中文版,让效率提升!

Rose

CAD看图软件可以进行标注吗?

在路上

cad cad看图 CAD看图王

怎么才能知道你的Mac的系统性能呢?Geekbench 5性能测试

Rose

整合YashanDB数据库与人工智能技术的优势

数据库砖家

鸿蒙Next仓颉语言开发实战教程:订单列表

幽蓝计划

【JeecgBoot AIGC】AI知识库实战应用与搭建

JEECG低代码

AI大模型 AI应用 AIGC JeecgBoot

四维图新与阿里云达成战略合作,联合打造汽车行业一揽子解决方案

科技汇

三大 Mac 软件下载站,总有一款适合你!

晨光熹微

mac苹果设备电量信息实时显示AirBattery免费

Rose

云原生数据库架构设计指南——基于YashanDB的方案解析

数据库砖家

苹果macOS 26兼容设备 macos 26完整pkg安装程序

Rose

动漫与游戏产业用到堡垒机的必要性你知道吗?

行云管家

网络安全 等保 堡垒机 游戏行业

现代财务——智能技术背景下的企业变革

智达方通

全面预算管理 财务管理

梁汝波:字节跳动要以持续智能突破,坚定服务产业应用

新消费日报

Ableton Live 12 Suite for mac v12.2中文:音乐制作软件

晨光熹微

如何使用CAD看图软件放大图纸文字?

在路上

cad cad看图 CAD看图王

AI 技术在图书馆业务中的应用

北京木奇移动技术有限公司

软件外包公司 AI技术应用 图书馆信息化

电线电缆行业MES系统:实现智能制造与全流程追溯

万界星空科技

制造业 mes 万界星空科技mes 电线电缆行业 电线电缆mes

火热报名中丨暨2025第三届中国SRE大会,将于6月26日在上海召开

雅菲奥朗

AI 可观测性 2025SRE大会

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