HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

评论

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

如何制定有效的项目资金管理策略?

爱吃小舅的鱼

项目管理 审计 项目资金

PHP排序函数使用方法,按照字母排序等操作

百度搜索:蓝易云

php+mysql实现补齐24小时时间段同时赋值0的后端解决方案

百度搜索:蓝易云

探索淘宝API接口:高效网络爬虫数据抓取策略

代码忍者

API 接口 pinduoduo API

Astherus:基于真实收益,唤醒 LRT 赛道的第二春

股市老人

python模拟Y2K问题

极客罗杰

x86平台运行arm64平台docker镜像

百度搜索:蓝易云

Ubuntu下开启php调试模式报错如何解决

百度搜索:蓝易云

CentOS7安装Nginx+ModSecurity

百度搜索:蓝易云

Metasploit Pro 4.22.5-2024102801 发布下载,新增功能简介

sysin

Metasploit

如何成为优秀的项目管理者

爱吃小舅的鱼

项目管理

成功备考集成项目管理工程师的实用技巧

爱吃小舅的鱼

集成项目管理工程师

需要高效管理项目?2024年9款在线项目管理工具推荐

爱吃小舅的鱼

项目管理工具

释放创作潜力!Flux 模型现已集成至 ComfyUI,快来体验!

MatrixOrigin

数据库 AI 大底座 AI 图像生成

项目管理平台哪个好?9款优质系统推荐

爱吃小舅的鱼

项目管理 项目管理工具 项目管理软件

8 个最佳的开源任务管理系统(附打分)

NocoBase

开源 低代码 任务管理 无代码 任务管理系统

VMware vCenter Server 6.7U3w (安全更新) - ESXi 集中管理软件

sysin

vSphere vcenter

VMware vSphere 6.7 Update 3w 下载

sysin

vSphere vcenter esxi

ROS进阶:使用URDF和Xacro构建差速轮式机器人模型

梦笔生花

机器人 ROS2 UDRF

VMware Tanzu CLI 1.5.0 - VMware Kubernetes 发新版的命令行工具

sysin

Kubernetes Tanzu

2024项目管理平台推荐:9个值得关注的工具

爱吃小舅的鱼

【喜报】矩阵起源在2024年中国创新创业大赛斩获多个奖项!

MatrixOrigin

AI 大底座 创新创业大赛

MatrixOne v2.0.0 release note

MatrixOrigin

数据库 矩阵起源 MO

哪些项目管理工具值得考虑?10款详细介绍

爱吃小舅的鱼

项目管理工具

研发管理中和项目管理的资源配置难题

爱吃小舅的鱼

项目管理 研发管理

12.享元模式设计思想

杨充

HCL AppScan Standard 10.7.0 发布下载,新增功能介绍

sysin

AppScan

如何提升产品经理的项目管理能力

爱吃小舅的鱼

项目管理 产品经理

Quartz 集群增强版入门指南:轻松上手

代码忍者

SpringBoot 实战:文件上传之秒传、断点续传、分片上传

江南一点雨

AI技术在司库管理中的革新实践与未来趋势

用友智能财务

财务 AI技术 全球司库 司库

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