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

rem*_*rel 1 command domain-driven-design cqrs

我正在尝试使用DDD和CQRS.

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

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

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

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

有没有正确/更好的方式?

eul*_*rfx 8

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