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

How to update read model in CQRS pattern on schema change of write model database?

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

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

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

在你的情况下,你正在执行的操作似乎完全在你的域之外,因此你会遇到问题,这就是你不知道该怎么做的原因。

我建议你做一些类似于这个过程的事情:

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

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

希望对您有所帮助!!

再见,祝你好运!

在这种情况下,您只需为您的读取模型编写一个自定义脚本。就像你用你写的模型一样。最好是从您的代码而不是 SQL scripts.If 您有事件存储数据库,您需要人为地创建事件并存储。