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

Domain driven design 在命令处理程序/域服务中使用查询模型,domain-driven-design,cqrs,Domain Driven Design,Cqrs,我是否应该使用查询模型来组合/检查某些聚合信息,如在域服务中?我已经在很多例子中看到了这一点。但是,如果查询数据作为域事件的结果异步传播,该怎么办 示例:具有用户聚合和消息聚合的消息板(对于较小的trx边界解耦)。 当用户被标记为已删除时,其所有邮件也需要被标记为已删除。这将通过在MessageEventHandler类型的服务中处理UserMarkedDeletedEvent来完成。现在,该服务需要为特定用户的每条消息触发DeleteMessage命令。为了找到消息,需要进行查询。我想这必须在

我是否应该使用查询模型来组合/检查某些聚合信息,如在域服务中?我已经在很多例子中看到了这一点。但是,如果查询数据作为域事件的结果异步传播,该怎么办

示例:具有用户聚合和消息聚合的消息板(对于较小的trx边界解耦)。
当用户被标记为已删除时,其所有邮件也需要被标记为已删除。这将通过在MessageEventHandler类型的服务中处理UserMarkedDeletedEvent来完成。现在,该服务需要为特定用户的每条消息触发DeleteMessage命令。为了找到消息,需要进行查询。我想这必须在读取模型上完成,因为异步更新可能会过时。。。(我想在事件源的情况下,唯一的选择是读取/查询模型)

仅在性能方面这样做是可以的。但是你应该知道你真正在问什么,阅读模型是什么意思

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

但是,您只能声明命令无效或可能有效。真正的真相是总的

例如:


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

谢谢鲁福爵士,读取模型确实不是事实。我还添加了一个示例来说明这一点。这些消息是如何组织的?它们是用户聚合的一部分吗?然后,您不需要任何命令,只需获取UserMarkedDeletedEvent并将其发布到用户的读取模型以及来自该用户的消息