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

时间:2015-09-05 07:24:04

标签: domain-driven-design cqrs

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

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

1 个答案:

答案 0 :(得分:1)

只是在性能方面这样做是可以的。但你应该知道你真正问的是阅读模型及其含义。

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

但有了这个,您只能声明命令无效或可能有效。真相是总的来说。

示例:

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