【问题标题】:How to update read model in CQRS pattern on schema change of write model database?如何在 CQRS 模式中更新写入模型数据库的模式更改中的读取模型?
【发布时间】:2019-12-05 11:21:36
【问题描述】:

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

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

【问题讨论】:

    标签: design-patterns domain-driven-design cqrs domain-events command-query-separation


    【解决方案1】:

    正如他们的名字所说,领域事件是代表在您的领域中发生的事情,一个好的做法是尽可能将它们提升到与它们相关的聚合。实际上,您应该将这些事件记录在聚合本身中。

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

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

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

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

    希望对你有帮助!!

    再见,祝你好运!

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-25
        • 2019-12-02
        • 1970-01-01
        • 2012-10-12
        • 1970-01-01
        • 2015-06-14
        • 2011-06-29
        • 1970-01-01
        相关资源
        最近更新 更多