あなたは実際にここで質問を提起しましたが、それは現在開発者コミュニティで多くの議論を引き起こしています- フォローアップ コメントを参照してください。
リポジトリは、関連付けられた複数のエンティティを含む複雑な組み合わせオブジェクトを作成できます (作成する必要があります)。ドメイン駆動型の設計では、これらは集合体と呼ばれます。これは、まとまりのある構造に編成された関連オブジェクトのコレクションです。GetCustomer()
コードで 、GetOrdersForCustomer()
、 をGetInvoicesForCustomer()
個別に呼び出す必要はありません。 を呼び出すだけmyCustomerRepository.Load(customerId)
で、これらのプロパティが既にインスタンス化された深い顧客オブジェクトが返されます。また、特定のデータベース テーブルに基づいて個々のオブジェクトを返す場合、それは完全に有効なアプローチですが、それはsé ごとのリポジトリではなく、単なるデータ アクセス レイヤーであることも付け加えておきます。
一方で、Linq-to-SQL オブジェクトは、「スマート」なプロパティと遅延実行 (つまり、実際に使用するまで Customer.Orders をロードしない) を備えたリポジトリ パターンの完全に有効な実装であるという説得力のある議論があります。実際にはデータベース コードを実行していないため、LINQ ステートメントを実行しています (基になる LINQ プロバイダーによって DB コードに変換されます)。
一方、Matt Briggs の投稿が指摘しているように、L2S はデータベース構造 (テーブルごとに 1 つのクラス) とかなり緊密に結合されており、制限があります (たとえば、多対多のマッピングはありません)。L2S を使用した方がよい場合もあります。リポジトリ内のデータ アクセス用ですが、L2S オブジェクトを独自のドメイン モデル オブジェクトにマップし、それらを返します。