一部のドメイン ロジック実装エンティティは、自己または関連エンティティの更新/削除のためにリポジトリにアクセスする必要がある場合があります。これは正しいと思いますか??
2 に答える
いいえ、少なくとも「ドメイン駆動設計」タグでタグ付けされた質問については、そうではありません。確かに、アクティブ レコード パターンは一部のシステムで使用する権利があり、強力な結合が役立つと考える人もいますが、DDD で提案されている方法は、リポジトリを明示的に使用することです。
Evans DDD, p.152 : グローバル アクセスが必要なオブジェクトのタイプごとに、そのタイプのすべてのオブジェクトのメモリ内コレクションの錯覚を提供できるオブジェクトを作成します。«...» 実際に直接アクセスする必要がある AGGREGATE ルートに対してのみ REPOSITORIES を提供します。クライアントをモデルに集中させ、すべてのオブジェクト ストレージとリポジトリへのアクセスを委任します。
したがって、DDD では、リポジトリは、データベースへのアクセスに必要なインフラストラクチャ コードをカプセル化するだけでなく、オブジェクトを格納してロードする必要があるという全体的な考え方もカプセル化します。
データベースの保存と読み込みを伴う複合アクションを実行している場合、リポジトリへの参照を持つサービスが最適な候補です。
エンティティがそれ自体を格納または削除するために独自のリポジトリにアクセスできることは確かに危険に思えますが(持続性の無視を参照)、いくつかの特定のケースでは、エンティティがリポジトリから別の集約ルートを例外的に要求することを許容できます。への参照をすでに保持しています。
ただし、ドメイン エンティティはリポジトリの抽象化(つまり、ドメイン層に存在するインターフェイス) のみを認識し、具体的な実装は認識しないことに注意してください。したがって、ドメイン レイヤーがインフラストラクチャ レイヤーを参照するのではなく、実行時に必要な場所に具体的なリポジトリのインスタンスを挿入します。
とにかく、これは標準であってはなりません。