Pra*_*yat 6 domain-driven-design cqrs event-sourcing akka-persistence
我正在查看使用方法事件采购/ DDD/CQRS设计的应用程序中查询的帖子.
据我所知,事件是域对象状态的变化.对状态的更改将作为DB(任何sql/no sql)中的历史记录/事件进行维护.
如果用户想要查询以获取特定聚合根的当前状态,则将涉及获取事件的历史记录.
当用户将查询特定于业务的查询时,他/她将对当前状态感兴趣而不是事件历史.
CQRS中的查询或"Q"部分如何与事件采购一起使用?
考虑我有一个域对象"帐户"作为聚合根.账户AR将经历许多变化,即信用借记.活动商店将有信用卡和借记卡活动.
考虑用户需要获得帐户的当前余额,事件历史流将如何在这里设置?用户如何获取给定帐户的当前余额?
我无法理解,如何针对特定业务查询事件历史记录有用吗?
-Prakhyat MM
我建议您阅读更多来自 Greg Young(他就像 CQRS 和事件溯源之父)的文章,例如:CQRS、基于任务的 UI、事件溯源……啊。
抱歉我的英语不好,我来自巴拉圭。但我真的很喜欢 DDD - CQRS - ES,我想尝试说明一点。
“投影”(也称为物化视图)的使用和“最终一致性”的概念是每个 CQRS 从业者都应该非常了解的基础知识。事件存储用于查询。在 CQRS 的命令端,而不是在查询端。您可以使用总线将存储在 Event Store 中的事件发送到查询端,以便处理和生成读取模型或视图模型,您可以从中查询。在任何情况下,事件存储本身就是一个查询模型。
看起来你是一个 Java 人,但是,你仍然可能想查看Microsoft的CQRS 之旅。希望这会有所帮助并激励您对 DDD / CQRS / ES,新的业务线应用三重奏进行更多研究。
足够有趣的是,最近有更多的人发现使用事件存储作为读取模型,而在绝对必要之前将投影和“适当的”读取模型留在了上面。
我们都知道,处理预测会增加复杂性。至少您必须创建新模型,为读取模型建立DAL,并创建投影以将事件转换为读取模型更改,并将这些投影绑定到商店中的事件流。它需要更多的代码,更多的活动部件,其中一些不容易测试。读取端的模式更改也需要迁移。
看来,在许多情况下,读取所有事件(适当地分区)可能足以使您的“读取模型”。在系统真正变大之前,不需要花费很多时间,因此您需要阅读数以万计的事件才能创建一个UI屏幕。但是在达到这一点之前,您只能读取事件。尽管EventStore之类的工具是免费的并且非常易于使用,但可以使用文件系统来存储事件。可能会添加一些索引。
通过这种方法,您可以显着稳定域,获得有关系统工作方式的更多知识,调整事件,并为将“适当的”读取模型带入系统做好了充分的准备,但您不一定必须这样做。
亚当·迪米特鲁克(Adam Dymitruk)撰写了一篇有关它的博客文章,即使您不想采用这种方法,也可能会觉得值得一读。格雷格·杨(Greg Young)在2012年还发表了一篇演讲,讲了EventStore作为读取模型。