3
DDDによるトランザクションの整合性の確保
私は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を削除します。この場合、削除されたばかりの製品への参照を設定しますか? これは、別のドメイン設計を使用する必要がある(必要に応じて追加の要素を追加する)か、トランザクションを使用する必要があるという点で、私の設計の欠陥ですか?