Domain driven design 在DDD聚合根目录中,应该将检查现有聚合的逻辑放在哪里

Domain driven design 在DDD聚合根目录中,应该将检查现有聚合的逻辑放在哪里,domain-driven-design,aggregateroot,domainservices,Domain Driven Design,Aggregateroot,Domainservices,假设我有一个订单聚合根目录,当我收到创建订单的命令时,我应该在某些条件下检查其他订单,如果这些条件满足,则拒绝创建。检查此条件肯定是业务逻辑,但我不应该首先创建订单,因为条件不满足。 那么,如何实施符合DDD原则的检查呢? 它是域服务、应用程序服务的一部分吗 编辑: 顺序中有TableId属性。 例如,我需要检查表是否已经被占用,如果是,则拒绝订单创建。此表服务可能位于另一个AppDomain中,并且可能需要网络调用 我正在使用事件源、CQR和命令处理程序。对不起,我不能发布代码 那么,如何实施

假设我有一个
订单
聚合根目录,当我收到创建
订单
的命令时,我应该在某些条件下检查其他订单,如果这些条件满足,则拒绝创建。检查此条件肯定是业务逻辑,但我不应该首先创建订单,因为条件不满足。 那么,如何实施符合DDD原则的检查呢? 它是域服务、应用程序服务的一部分吗

编辑:
顺序中有TableId属性
。 例如,我需要检查表是否已经被占用,如果是,则拒绝订单创建。此表服务可能位于另一个AppDomain中,并且可能需要网络调用

我正在使用事件源、CQR和命令处理程序。对不起,我不能发布代码

那么,如何实施符合DDD原则的检查呢

“视情况而定”

如果不需要所有内容都完全一致,那么可以为聚合提供其他数据的缓存副本以计算其逻辑。人们对此有不同的模式;使用域服务为您获取数据是一个问题,将控制权返回应用程序以为您获取数据是另一个问题

----> create order
<---- here is a list of other information I need
----> the other information
<---- here's the order
--->创建订单
其他信息

视情况而定。提供的信息太少。使用CQR时,请在命令处理程序中执行。您可以从存储库中获取订单,如果存在,则它显然存在,如果不存在,则添加它。更复杂的业务逻辑涉及两个或多个聚合可能会进入域服务(即银行转账)@Tseng感谢反馈,我发布了一个问题编辑以提供更多背景信息。