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.
我有 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.