大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

评论

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

KubeWharf: 云原生分布式操作系统体验部署

RoSofteg

KubeWharf

强大的高效视频处理框架——BMF

白日梦

视频处理 多媒体 BMF

KubeZoo 和 KubeAdmiral 强在哪里?

白日梦

k8s KubeWharf

云原生技术的探索与实践| 主赛道

Emo_TT

云原生 年终总结

大模型:未来的智能方向

在书中成长

AI 大模型 ChatGPT

【新手入门】如何java来求各种数

极客罗杰

结束不是终点,而是新的起点

晴空万里

技术人的2023漫谈AI语音体验之路

RoSofteg

#技术人的2023总结

大数据技术年度总结 | 主赛道

Emo_TT

大数据 可视化 年终总结

打造新一代云原生"消息、事件、流"统一消息引擎的融合处理平台

码界西柚

RocketMQ 云原生 #技术人的2023总结 火山引擎开发者社区 2023年技术盘点

大数据安全与隐私保护:构建可信的数据生态系统

范艺笙冉

按图搜索1688商品(拍立淘)接口(1688.item_search_img) 丨1688图片搜索API接口

tbapi

1688图片搜索接口 按图搜索1688商品数据接口 1688图片搜索商品接口 1688拍立淘接口 1688图片搜索API接口

大模型的应用前景:从自然语言处理到图像识别

啊川..

一次不算太好的 E3PO 项目体验

战场小包

开源 视频流 E3PO

ChatGPT使用注意事项有哪些?

跨境

openai VISA ChatGPT

2023-12-30:用go语言,给你一个下标从 0 开始的整数数组 nums ,它包含 n 个 互不相同 的正整数, 如果 nums 的一个排列满足以下条件,我们称它是一个特别的排列。 对于 0 <

福大大架构师每日一题

福大大架构师每日一题

E3PO:360°视频模拟的探索与发现

RoSofteg

E3PO

探索大模型知识库:技术学习与个人成长分享

熬夜磕代码、

paypal实操常见问题——绑卡篇

跨境

PayPal

「亲测有效」ChatGPT Plus会员/GPT4开通方法 — 仅需支付宝或微信

跨境

openai VISA ChatGPT

云原生容器编排问题盘点,总结分享年度使用Kubernetes的坑和陷阱

码界西柚

Kubernetes 云原生 问题总结 #技术人的2023总结 方案分析

1688店铺所有商品数据接口(1688.item_search_shop)丨1688API接口

tbapi

1688API接口 1688商品数据接口 1688店铺所有商品数据接口 1688整店商品数据接口

实时音视频采集和处理:技术探索与实践指南

不会算法。

云原生架构未来发展趋势,探索容器技术未来的发展趋势

Tech技术攻关

云原生 未来技术趋势 #技术人的2023总结 架构方向

【高效视频处理】BMF 项目安装与老视频修复体验全流程及总结

中杯可乐多加冰

在iOS应用中使用实时活动与灵动岛

珲少

技术人的 2023 总结之无处不在的AI

六月的雨在InfoQ

AI 2023 #技术人的2023总结

1688店铺详情数据接口(1688.seller_info)丨1688API接口

tbapi

1688API接口 1688店铺详情接口 1688公司详情接口 1688店铺评分接口

记录时光爬过2023年AI所留下痕迹,那么24年的AI还神秘吗?

鸿蒙之旅

AI

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