如何在写入模型数据库的模式更改时以CQRS模式更新读取模型?

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

同时使用带有域事件的CQRS模式来生成读取模型。

如果我们使用一些默认数据在数据库中添加新列,或者手动直接从sql查询中插入新行,在这种情况下不会生成任何事件,那么如何更新现有的已生成读取模型?

design-patterns domain-driven-design cqrs domain-events command-query-separation
2个回答
0
投票

顾名思义,域事件是代表您域中发生的一件事情,一种好的做法是将它们尽可能地提高到与它们相关的集合。实际上,您应该将这些事件记录在聚合本身中。

在您的情况下,您似乎正在执行的操作完全不在您的域内,因此您会遇到问题,这就是为什么您不知道如何做的原因。

我建议您执行与此过程类似的操作:

  1. 将您的域更新为具有默认值(如果需要的话)的新属性(及其到数据库的映射),但可以为空
  2. 运行一个例程(或脚本,或任何可以执行此操作的操作),该例程在内部调用负责更新该字段的应用程序的用例,并且将对每个聚合(整个表)执行此操作)
  3. 内部,每个聚合将记录相关事件,并在执行的某个时刻发布事件,然后将其消耗以更新您的读取模型
  4. 一旦所有汇总更新,就可以使该字段不可为空(在您的域和数据库中)

我强烈建议您避免执行手动SQL查询,因为您的应用程序将无法始终如一地对这些更改做出反应。

希望这可以帮助您!

再见,祝你好运!


0
投票

在这种情况下,您只需要为读取模型编写一个自定义脚本即可。与编写模型相同。而且最好是从代码而不是从SQL脚本执行。如果您有事件存储数据库,则需要人为创建事件并存储。

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