我从DDD开始,并了解使用聚合根来确保跨国一致性。我们不应在一项应用程序服务中修改多个聚合。
但是,我想知道如何处理以下情况。
我有一个称为“产品”的聚合根。
还有一个称为“组”的聚合根。
两者都有ID,并且可以独立编辑。
多个产品可以指向同一组。
我有一个可以更改产品组的应用程序服务:
ProductService.ChangeProductGroup(string productId, string groupId)
- 检查组存在
- 从仓库获取产品
- 设置组
- 将产品写回到存储库
我还有一个可以删除组的应用程序服务:
GroupService.DeleteGroup(string groupId)
1.从其groupId设置为提供的groupId的存储库中获取产品,确保计数为0或中止2.从组存储库中删除组3.保存更改
我的问题是以下情况,如果发生以下情况:
在ProductService.ChangeProductGroup中,我们检查该组是否存在(确实存在),然后在此检查之后,一个单独的用户(通过另一个GroupService.DeleteGroup)删除了productGroup。在这种情况下,我们为刚刚删除的产品设置了参考?
这是我设计中的缺陷吗?我应该使用其他域设计(如有必要,添加其他元素),还是必须使用事务处理?