我有一个问题,我找不到答案。场景是这样的,我有一个产品,它有两个字段,如名称、描述、图像链接等等。当我将这些字段保存到事件存储区时,当我想恢复聚合时,我有一个事件ProductRegistered和所有这些字段。当我想恢复聚合时,我从事件存储中读取这个事件并将它加载到聚合中。当我进行更新时,我有另一个事件ProductUpdated,它也包含所有字段,但是这里有一个技巧,它只保存被修改的字段。问题是,当我想修改聚合并删除或添加任何属性时,它会引发异常。所以我读到了它,解决方案是把这两个大事件分成更小的事件。我的问题是,我该怎么分?我应该每个场地举行一次活动吗?因为用户可以从端点发送6个值。
例如,当我注册一个产品时,我应该创建像ProductRegistered (只有产品Id)、ProductNameChanged (带有产品名称)之类的事件吗?
发布于 2022-10-23 13:53:41
一般来说,最佳做法是捕捉变化的总体背景和原因,因为这样做可以帮助这些事件的下游消费者采取行动,而不必试图重建(可能是不完美的)环境。由于事件来源往往意味着CQRS,并且至少与写模型一样多,一个更复杂的写模型(也就是需要处理的更多类型的事件)来交换不那么复杂的读模型(特别是如果读模型可以忽略它们不关心的事件类型),这通常是一种值得进行的交易。
聚合的字段(更不用说任何特定读取模型的字段,取决于该聚合)与事件的字段之间也没有必要的联系:事件的字段应该描述更改的含义,而写入模型中的聚合字段只是捕获验证未来更改所需的内容:如果imageLink的值从未影响更新name的命令是否被接受,反之亦然,然后,绝对没有必要让imageLink和name是相同的聚合(例如,您可以有两个不同的聚合体与相关的标识者跟踪产品的名称和图像链接)。
https://stackoverflow.com/questions/74151331
复制相似问题