CQRS:我应该对读取模型使用其他事件吗?

问题描述 投票:0回答:2

我有一个已经实施了CQRS和事件来源的项目。现在,我将实现一个读取模型。

目前,ProductCreated事件具有EventID和Product ID。但是我们对于读取模型,我想使用不同的字段-产品名称和类别。

在这种情况下,我是否需要将Product Name和类别添加到ProductCreated事件,或者创建一个仅使用Read Model的名称和类别的事件?

我是CQRS和事件采购的新手。我整天都在寻找这个问题的答案,但找不到合适的解决方案。

提前感谢。

asp.net-core cqrs event-sourcing
2个回答
2
投票

简单

如果您有专用的读取模型,则肯定应该具有ProductID以及ProductName和Category。

为什么?

仅因为如果有人请求此模型而让某些客户端UI或API客户端在没有ID的情况下,则它将无法跟踪您所返回的确切产品,因为多个产品的ProductName可能相同。

在这种情况下,我需要将产品名称和类别添加到ProductCreated事件,或仅使用名称&创建另一个事件读取模型的类别?

从命名ProductCreated事件进行猜测是一个事件,其中包含已创建产品的信息。这实际上取决于您的业务需求和设计,但我建议您将所有产品模型信息(至少应该公开的属性)放入ProductCreated事件中。这将是ProductId,ProductName,ProductCategory和其他一些名称(如果您具有ProductDescription,ProductCode之类的内容以及Product模型中的任何内容)。

谁在听此事件,可以决定他们是将整个模型保存在其存储中还是仅保存该模型的一个子集。当然,这是基于特定事件使用者的需求。

如果您拥有或将来会拥有多个您要发布的活动的使用者,则此方法很好。如果没有,并且只有1,则可以删除读取模型中不需要的属性。

结论

您不需要第二个事件来传输您描述的数据子集。我建议将所有内容放入ProductCreated事件,然后在处理此事件的过程中放入您的读取模型中,仅保存您需要的数据子集。


1
投票

在某处是否有一些查找表将产品ID映射到名称和类别?如果是这样,请在您的读取模型中使用该表。

或者是谁在创建产品时提供此信息?如果是这样,则绝对必须将其添加到事件中,否则将丢失该信息。

© www.soinside.com 2019 - 2024. All rights reserved.