命令/句柄是应该保留完整的聚合还是只保留其ID?

时间:2013-04-08 14:01:58

标签: command domain-driven-design cqrs

我正在尝试使用DDD和CQRS。

我得到了这两个解决方案:

  • 将AggregateId添加到我的命令/事件中。我可以使用我的命令作为我的web服务的参数,我也可以将我的命令的一些实例返回到我的表单中,说“你可以执行此命令,他的一个和这个”

  • 将我的完整聚合添加到我的命令/事件中。这很好,因为我确定如果有很多事件发生,我将不会加载我的聚合100次,我只是传递我的引用(例如我不会在我的命令的验证器中加载它我的命令处理程序)。但我会添加为每个命令创建一个参数类,只有id。

现在我在命令中有id和事件中的完整模型(我相信我的工作单元用于缓存Load(aggregateId)所以我不会为1命令执行相同的请求100)。

是否有正确/更好的方式?

1 个答案:

答案 0 :(得分:8)

是您当前的方法是正确的 - 使用命令上的标识值引用聚合。命令用于序列化并跨进程边界发送。此外,命令通常由客户端构建,该客户端可能没有足够的信息来创建整个聚合实例。这也是应该使用身份的原因。是的,如果需要,您的工作单元应该在一个工作单元的持续时间内负责缓存聚合。