私のデータベースは比較的小さく、それぞれが5つ未満の列を持つ8つのテーブルです。私はEFを使用します。私は単一のリポジトリクラスを作成しましたが、今はそれを使うのが正しい方法ではないかもしれないと思います。私のコントローラごとに別々のリポジトリクラスを用意する必要がありますか?私は製品、ユーザー、Unicornsを持っていると言うと、それらのすべてで動作する単一のリポジトリクラスを持ち、それぞれのコントローラでインスタンス化するのは良いでしょうか、それともそれぞれのリポジトリクラスを個別に作成する必要がありますか?単一または複数のリポジトリクラス?
答えて
DDDの重要な概念の1つは、集約ルートです。これは、関連するエンティティのセット全体を管理するための「トップレベル」エンティティです。
たとえば、小売シナリオでは、「オーダー」はオーダー自体にアクセスできる集約ルート、OrderItemsのリスト(すなわち、割引などのProduct + Amount +修飾子)、BillingAddress、ShippingAddressおよびPaymentMethod 。それらのそれぞれは、注文の範囲外に存在する理由がないほど、注文自体に密接に関連しています。
各集約ルートは、ルートの下にあるオブジェクトのサブグラフ全体を永続させる責任を持つリポジトリを持つ必要があります。したがって、上記の例では、OrderItemsのリポジトリーを必要としたり、必要とせずにアイテムを個別に注文することができます。 Ordersとそのすべてのサブコンポーネントを単一の単位として処理する単一のOrdersRepositoryを実装する必要があります。
特定のドメインモデルによっては、1つまたは複数のリポジトリが必要な場合がありますが、確かにエンティティタイプごとに1つは必要ありません。集約ルーツを探すときに尋ねる重要な質問は、「このエンティティは独自のアイデンティティーとライフサイクルを持っていますか?オーダーは行いますが、OrderItemはそうしません。
エンティティごとのrepoistoryは良い考えではなく、むしろサービスごとのリポジトリが意味をなさないと思います。
たとえば、私の主なアプリケーションの焦点がUsersの場合はCategoriesRepositoryまたはCarsRepositoryを作成しません。
Think Domain-Driven Designを考えてみましょう。プロジェクトの論理構造をクラスとしてではなく、ドメインとしても、Product
のすべての操作がProductsController
その結果、ProductsRepository
の中にあるので、私はあなたのプロジェクトのいくつかの側面に対処するための操作を備えた多くのリポジトリを好んでいます。
すべての側面でリポジトリが必要なわけではありませんが、それがあなたが決定したものです。
- 1. 単一または複数のデータベース?
- 2. パフォーマンス:単一または複数の瓶?
- 3. React - 単一ページまたは複数ページ
- 4. 複数のアクティビティまたは単一のアクティビティと複数のフラグメント
- 5. 複数のサービスまたは複数のスレッドを持つ単一サービス
- 6. 複数の単一フィールドインデックス対複数フィールドインデックス
- 7. MongoDB - SaaSオファリング用の単一データベースまたは複数のデータベース
- 8. Apache Cassandra複数のパーティションキーまたは単一の計算キー?
- 9. ウェブサイトを使用 - 複数のページまたは単一のページ
- 10. 複数の小さなRPMまたは単一構造のRPM
- 11. RabbitQM複数のキューまたは単一のキュー?
- 12. ウェブプロジェクト内の単一または複数のロガーインスタンス
- 13. 単一のプロジェクトインスタンスまたは複数のプロジェクトインスタンス?
- 14. Javaサーバー用の単一または複数のスレッドプール?
- 15. 単一のストアドプロシージャコールまたは複数のデータベースコール?
- 16. エクスプレス - 輸出、複数のルータ()■または単一のルータ()?
- 17. LINQを使用した複数リポジトリまたは単一リポジトリ
- 18. 複数または単一の化合物インデックス
- 19. OpenJPAトランザクション - 単一または複数のエンティティ管理者?
- 20. Spring MVCの複数コントローラまたは単一コントローラ?
- 21. 値に基づく単一または複数のINSERT
- 22. MVC3 .net複数モデルまたは単一のビューモデル
- 23. Delphi DataModuleの使用法 - 単一または複数?
- 24. は、単一SetEvent()トリガ複数のWaitForSingleObject()は
- 25. 複数のエントリ単一セル
- 26. MongoDB複数の単一インデックス
- 27. 複数のジャー、単一パーシスタンスユニットソリューション?
- 28. wordpress複数の単一ページ
- 29. 複数の引数または単一の配列引数を許可する
- 30. プロット複数のY値単一Xは
偉大な答え!便利な記事http://devlicio.us/blogs/casey/archive/2009/02/16/ddd-aggregates-and-aggregate-roots.aspx – GibboK