9

私の asp.net mvc 3 アプリケーションでは、リポジトリ パターンを使用しています。Company、Country、City の 3 つのエンティティがあります。それぞれに独自のリポジトリがあります。Company エンティティには、FoundedCountry および FoundedCity 外部キーがあります。ビューで、会社の詳細を表示したいと思います。このビューでは、会社の詳細と、FoundedCountry 名および FoundedCity 名を表示したいと考えています。私の意見では、これは一種の JOIN クエリで処理する必要があります。しかし、リポジトリパターンでこれを達成する方法に行き詰まっています。この JOIN をリポジトリ パターンで処理するにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

5

リポジトリには、タスクベースのインターフェイスが必要です。これは、ORM、結合などがリポジトリ内にあることを意味します。アプリは、使用できるオブジェクトを返すインターフェイスを確認するだけです。

これは、テーブルの周りにリポジトリを作成しないことを意味します(それは目的をかなり損ないます)。あなたのシナリオでは、(少なくとも)2つのリポジトリがあることをお勧めします。1つはモデルの更新に関連するすべてを処理し、もう1つは読み取り(クエリ)のみを提供します。

これは、クエリリポジトリが必要なデータのみを返すことを意味します(基本的にビューモデルビットを返します)。もちろん、実際のテーブルと結合は、リポジトリの実装の詳細です。

于 2012-04-24T10:06:48.370 に答える
2

結合を妨げる方法でリポジトリ パターンを構築しないでください。これは通常、現在の HTTP 要求に関連付けられているすべてのインスタンスに対して同じ ORM コンテキスト (DataContext/ObjectContext) を使用することを意味します。

データベースへのアクセスが同時に単一のタイプのエンティティに制限されることはめったにないため、一般的な IRepository を持つことはアンチパターンであると考えています。

DataContext/ObjectContext 自体をリポジトリと見なすことができます。

最後のアドバイス: リポジトリの抽象化の利点がわからない場合は、使用しないでください。

于 2012-04-23T22:32:36.907 に答える