design-patterns - 如何在 CQRS 模式中更新写入模型数据库的模式更改中的读取模型?
问题描述
在使用带有域事件的 CQRS 模式来生成读取模型时。
如果我们使用一些默认数据在数据库中添加新列或直接从 sql 查询手动插入新行,在这种情况下不会生成任何事件,那么如何更新现有生成的读取模型?
解决方案
正如他们的名字所说,领域事件是代表在您的领域中发生的事情,一个好的做法是尽可能将它们提升到与它们相关的聚合。实际上,您应该将这些事件记录在聚合本身中。
在您的情况下,您正在执行的操作似乎完全在您的域之外,因此您会遇到问题,这就是您不知道该怎么做的原因。
我建议你做一些类似于这个过程的事情:
- 更新您的域以具有默认值(如果需要)的新属性(以及它到 DB 的映射),但可以为空
- 运行一个例程(或脚本,或任何可以执行此操作的程序),该例程在内部调用负责更新该字段的应用程序用例,并且将为您的每个聚合(整个表)执行此操作
- 在内部,每个聚合将记录相关事件,并在执行的某个时间点发布事件,然后用于更新您的读取模型
- 更新所有聚合后,您可以使该字段不可为空(在您的域和数据库中)
我强烈建议您避免执行手动 SQL 查询,因为您的应用程序将无法始终如一地对这些更改做出反应。
希望这可以帮到你!!
再见,祝你好运!
推荐阅读
- java - 规则,在 UML 序列图中的箭头上写哪个对象的方法?
- python-requests - 无法从 sourcePylancereportMissingModuleSource(模块)请求中解析导入“请求”
- node.js - 我们可以使用名为 _MY_SECRET 的环境变量吗?
- sql - 在 SQL Server 2014 中将 Julian/Ordinal 日期转换为日期
- .net - 为什么隐式地将双精度转换为 IPAddress 会反转字节顺序?
- python - 此类中的描述符发生了什么?
- java - Maven 不是从控制台生成的
- javascript - 如何使用 JavaScript 在 JSON API 中的对象内循环多个数组
- vue.js - 使用 Vue js 的错误 401(未经授权)Keycloak
- php - Php laravel 如何在一个条件之外获得唯一值