在命令处理程序/域服务中使用查询模型

Pep*_*ter 5 domain-driven-design cqrs

我应该使用查询模型来组合/检查某些聚合信息,例如在域服务中吗?我在很多例子中都看到了这一点.但是,如果查询数据是由于域事件而异步传播的呢?

示例:具有User聚合和Message聚合的消息板(为较小的trx边界解耦).当用户被标记删除时,他的所有消息也需要被标记删除.这将通过在MessageEventHandler类服务中处理UserMarkedDeletedEvent来完成.现在,此服务需要为具有特定用户的每个消息触发DeleteMessageCommands.为了查找消息,需要查询.我想这必须在读取模型上完成,由于异步更新可能会过时...(我想唯一的选择是在事件采购的情况下读取/查询模型)

Sir*_*ufo 1

出于性能考虑,这样做是可以的。但你应该知道你真正在问读取模型什么以及它的含义是什么。

根据您的域,可能有一些状态一旦达到就永远不会改变或返回。如果您向读取模型询问其中一种状态,那么您可以说这是事实。

但这样你只能声明命令无效或可能有效。真正的真相在于总体。

例子:

foo 聚合一旦被删除,就永远不会被删除(域规则),并且此状态处于读取模型中。如果您从读取模型中获得此已删除状态,那么您可以说该命令(仅对未删除的 foos 有效)无效。但您不能声明它是有效命令,因为聚合可能已被删除并且未写入读取模型。