繁体   English   中英

DDD / CQRS查询事件

[英]DDD/CQRS Querying Events

我正在查看使用方法事件采购/ DDD / CQRS设计的应用程序中查询的帖子。

据我所知,事件是域对象状态的变化。 对状态的更改将作为DB(任何sql / no sql)中的历史记录/事件进行维护。

如果用户想要查询以获取特定聚合根的当前状态,则将涉及获取事件的历史记录。

当用户将查询特定于业务的查询时,他/她将对当前状态感兴趣而不是事件历史。

CQRS中的查询或“Q”部分如何与事件采购一起使用?

考虑我有一个域对象“帐户”作为聚合根。 账户AR将经历许多变化,即信用借记。 活动商店将有信用卡和借记卡活动。

考虑用户需要获得帐户的当前余额,事件历史流将如何在这里设置? 用户如何获取给定帐户的当前余额?

我无法理解,如何针对特定业务查询事件历史记录有用吗?

-Prakhyat MM

您将使用事件流投影到读取模型中,其中包含查询端(Q)所需的那些信息。 例如,您可以在所有更改帐户余额的事件之后进行“帐户余额”预测,但可能会忽略帐户流中的其他事件(例如所有者更改)。 然后,投影以一种可以非常快速地查询的方式保存该信息,例如,在内存中或在小型读取模型数据库表(accountId, balance) ,以accountId作为键(数据库可以是键值存储) , 例如)。

我建议进一步阅读CQRS概念,例如这一个这个

我建议你阅读更多来自Greg Young的文章(他就像CQRS和事件采购之父),像这样: CQRS,基于任务的UI,事件采购...... agh

抱歉我的英语不好,我来自巴拉圭。 但我真的很喜欢DDD - CQRS - ES,我想试着说明一点。

使用“预测”(也称为物化视图)和“最终一致性”的概念是CQRS的每个从业者都应该非常了解的基础。 Event Store用于查询。 在CQRS的Command端,而不是在Query端。 您可以使用总线将事件存储中存储的事件发送到查询端,以便处理和生成读取模型或查看模型,您可以从中查询。 在任何情况下,eventstore本身都是一个查询模型。

看起来你是一个Java人,但是,你仍然可以查看微软CQRS之旅 希望这会有所帮助,并激励您对DDD / CQRS / ES(业务应用新三重奏)进行更多研究。

有趣的是,最近有更多的人发现使用事件存储作为读取模型,留下投影和“适当的”读取模型,直到绝对必要。

我们都知道处理预测会增加复杂性。 至少您必须创建新模型,为读取模型建立DAL并创建投影以将事件转换为读取模型更改,并将这些投影绑定到商店中的事件流。 它需要更多的代码,更多的移动部件,其中一些不容易测试。 读取端的模式更改也需要迁移。

看来,对于许多情况,读取所有事件(正确分区)可能足以拥有“读取模型”。 在系统真正变大之前需要花费不多的时间,因此您需要阅读数万个事件来创建一个UI屏幕。 但在你达到这一点之前,你可以阅读事件。 可以使用文件系统来存储事件,尽管像EventStore这样的工具是免费的并且非常容易使用。 可能会添加一些索引。

这种方法可以让您显着稳定域,获得有关系统如何工作的更多知识,调整事件并准备好将“正确”的读取模型引入系统,但您可能不必这样做。

Adam Dymitruk撰写了一篇关于它博客文章 ,即使你不想采用这种方法,你也可能会发现它值得一读。 Greg Young还在2012年作为阅读模型发表了关于EventStore的演讲。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM