domain-driven-design - 当键未发生时查找读取模型投影行?

标签 domain-driven-design cqrs event-sourcing

我想在我的 CQRS/ES 应用程序中创建一个新的事件读取模型投影。

问题是我需要用于投影的 key 并不存在于我的所有事件中:

我的根聚合是一辆汽车。

  • 第一个事件是包含“制造商”的 CarCreated 事件

  • 然后我将有一个仅包含“日期”的 CarRepaired 事件

我的新读取投影是一个CarsRepairedPerManufacturer,它将计算每个制造商的维修汽车数量:

  • CarCreated 事件没有问题:此事件保留“制造商”,因此我的读取 View 是使用正确的 key 创建的

  • 问题出在我的 CarRepaired 事件上:当我的事件中没有此信息时,如何在我的读取模型中找到正确的行(其中关键是制造商) ?

也许我在这里遗漏了一些东西,因为如果这是无法解决的,它将限制您在 ES/CQRS 中可以进行的预测类型。

最佳答案

您的问题没有具体提到 DDD,但这是一个非常值得考虑的有用范例。 CQRS/ES 并不是这里的障碍。

您遇到了上下文混合的经典问题。汽车被创造(或“ build ”)的环境并不关心它们维修时会发生什么。维修发生的环境并不真正关心汽车的制造过程。您的单个汽车聚合尝试同时服务两个上下文,这就是您出现阻抗不匹配的原因,并且应该让您暂停以重新考虑您的设计。

您确定您已经正确绘制了聚合边界,即“汽车”需要跟踪它的创建和维修吗?为什么没有“汽车”聚合和“维修”聚合?

关于domain-driven-design - 当键未发生时查找读取模型投影行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35173346/

相关文章:

spring-boot - Axon Framework 中两个聚合体之间的通信

domain-driven-design - 聚合可以成为域事件的一部分吗?

elasticsearch - 使用EventStore和ElasticSearch实现CQRS

postgresql - 用于事件溯源的关系数据库模式

cqrs - 什么是事件溯源中的 react 器/ react ?

oop - 域驱动设计中多个表的单个存储库与多个存储库

domain-driven-design - 值对象与实体

sql-server - CQRS:写入 RDBMS,从 NoSQL 读取?

spring-boot - org.axonframework.eventsourcing.IncompatibleAggregateException(轴突框架 : Aggregate identifier must be non-null after applying an event)

c# - EfCore 与 DDD 中的多对多关系