2009-04-12 1 views
12

私はリポジトリパターンが新しく、ウェブで多くの読書をした後、何が起こっているのかを大まかに理解していますが、アイデアの矛盾があるようです。リポジトリパターン - POCOまたはIQueryable?

IRepositoryが返すものは1つです。

私はそうのようなので、私はすべての集約ルートのIRepository実装を持っているでしょうONLY POCOSに対処したいと思います:IOrangeCriteriaオレンジを見つけるための特定の引数の数を取る

public class OrangeRepository: IOrangeRepository 
{ 
    public Orange GetOrange(IOrangeCriteria criteria); 
} 

私が持っている他のものは、多くのデータバックエンドです。これが最初にこのパターンに入り込んだ理由です。私は再びPOCOSの私IOrangeRepository取引場合 - 私はEFまたはNHibernateはを使用することができるように開いて、それを維持したいと思います

OrangeRepositoryOracle、OrangeRepositorySQL、OrangeRepositoryMockなど

例えば、私はそれぞれの実装を持つことになります想像しますOrangeRepositoryNHibernateなどを実装することで、これをリポジトリ内にカプセル化します。

私は正しい行にありますか?

おかげ

EDIT:それは高く評価されて、フィードバックのためのおかげで、私は現時点では、これらのアイデアをバウンスするために他の誰を持っていません!

答えて

9

はい、ご使用のバージョンは、最も安全で互換性の高いバージョンです。データアクセスだけでなく、Webサービスやファイルなど、あらゆるリソースについても、それを使用することができます。

IQueryableバージョンでは、POCOクラスに基づいて動作しますが、あなたはIQueryableに縛られています。また、IQueryableを使用するコードを持っている可能性があり、リポジトリのORMの1つがうまく処理できないケースが発生することが判明しました。

5

私はあなたと同じパターンを使用します。それは大好きです。任意のリソースからデータを取得できます。

しかし、IQuerableを使用する利点は、OrangeCriteriaのような独自の基準APIをコーディングする必要がないことです。

NHibernateが完全なLinqサポートを取得すると、IQueryableに切り替えることができます。

次に、あなたが取得

public class OrangeRepository: IOrangeRepository { 
    public IQueryable<Orange> GetOranges(); 
} 
関連する問題