私はDDDから始めて、国境を越えた一貫性を確保するために集約ルートが使用されることを理解しています。1つのアプリケーションサービスで複数の集計を変更しないでください。
ただし、次のような場合の対処方法を教えてください。
Productsという集約ルートがあります。
グループと呼ばれる集約ルートもあります。
どちらにもIDがあり、個別に編集できます。
複数の製品が同じグループを指すことができます。
製品のグループを変更できるアプリケーションサービスがあります。
ProductService.ChangeProductGroup(string productId, string groupId)
- チェックグループが存在する
- リポジトリから製品を取得する
- グループを設定する
- 製品をリポジトリに書き戻す
グループを削除できるアプリケーションサービスもあります。
GroupService.DeleteGroup(string groupId)
1. groupIdが提供されたgroupIdに設定されているリポジトリから製品を取得し、カウントが0または中止であることを確認します2.グループリポジトリからグループを削除します3.変更を保存します
私の質問は、次のシナリオです。
ProductService.ChangeProductGroupで、グループが存在することを確認し(存在する場合)、この確認の直後に、別のユーザーが(他のGroupService.DeleteGroupを介して)productGroupを削除します。この場合、削除されたばかりの製品への参照を設定しますか?
これは、別のドメイン設計を使用する必要がある(必要に応じて追加の要素を追加する)か、トランザクションを使用する必要があるという点で、私の設計の欠陥ですか?