DDD 和 CQRS,如何确定提供的关系 id 是否确实作为另一个聚合根存在

DDD and CQRS, how to make sure if provided relation id really exists as another aggregate root

我有 2 个单独的聚合根 product,有自己的实体和 VO,并且 manufacturer

并且它们之间存在多对多关系。

如果我们从product聚合的角度来看,product可以有很多manufacture而且应该至少有一个。

如果我们从manyfacturer的角度来看,可以没有也可以有很多product

让我们只考虑 product 合计。产品聚合不应该知道制造商,它只需要制造商 ID,仅此而已,但是......从另一方面来说,我不知道什么产品有 link 到 invalid/unexisting 制造商。

据我所知,调用另一个聚合以确保它存在是一种不好的做法,对吧?我该怎么做,我可以在更新产品时从产品相关命令中 运行 查询 IsManufacturerExist 吗???如果产品的制造商无效,则意味着产品本身无效,我不希望产品处于无效状态。

如果我们从制造商汇总方面来看,大致相同。

感谢您的帮助!

How can I do it, can I run some query like IsManufacturerExist from the product related command while updating product???

我认为您所讨论的问题与 所描述的相同。

两个常见的答案

  • 在您的应用程序代码中调用查询,并将 answer 传递给您的域代码。
  • 将查询本身传递给域模型,以便可以在那里调用它

第二种方法是您看到“DomainService”模式的地方。

这两种方法都有一个具体的考虑因素:您不必担心竞争条件;换句话说,如果制造商在更改产品的同时进行更改,应该会发生什么情况?

如果犯错代价高昂,那么您要么需要引入锁定策略,要么需要重新设计您的模型。如果不贵,那么你可以用 Memories, Guesses and Apologies.