DDD の一意性のチェックについて質問があります。スタックオーバーフローでこれについていくつか質問があることは知っていますが、私の疑問に実際には答えていません
データベースへの更新/挿入時に一意性をチェックするために、集約ルートがリポジトリの参照を保持することは可能ですか? それとも、これはドメイン モデルではなく、アプリケーション サービスによって実行されるタスクですか?
ユーザー登録時にユーザーモデルのユーザー名が一意かどうかを確認したいとしましょう。考えられるいくつかのアプローチがあります。
- ユーザー モデル参照 UserRepository、Validate() で一意性チェックを行う
- UserRepository を使用して、一意性チェックを行うドメイン サービスを作成します (通常、ロジックが複数のドメイン モデルにまたがる場合にのみドメイン サービスが使用されると思うので、これは少し奇妙に思えます)。
- UserRepository を参照してドメイン層に仕様オブジェクトを作成し、一意のチェック規則をカプセル化し、アプリケーション サービス層はこれを使用して更新/挿入前にチェックを行います
また、依存性注入を使用する場合、アプローチ 1 で UserRepository をユーザーに注入する方法、アプローチ 2 でドメイン サービスを注入する方法、またはアプローチ 3 でアプリケーション サービスを注入する方法についてまだ疑問に思っています。 、オブジェクトを手動でインスタンス化する必要があるため、IoCでサービスロケーターを使用してインスタンスを取得する唯一のオプションがあるようです。でもサービスロケーターはアンチパターンなので避けたい
サンプルコードは大歓迎です