2012-02-15 9 views
0

私はC#のASP.NET MVC3でアプリケーションを開発しています。私のリポジトリメソッドでは、ジョインやその他の複雑な操作を行うことをお勧めしますか?

私は現在、私のADO.NETのEFによって構成さDALリポジトリクラスMyDBRepository構築しています:

public class MyDBRepository 
{ 
    MyDBEntities myDB; 

    public MinervaDBRepository() 
    { 
     myDB = new MyDBEntities(); 
    } 

    //methods 
} 

を私はまだMyDBRepositoryによって実行されるクエリの詳細レベルについての不確実ですメソッド。私は、このクエリがリポジトリに適切であることを知っている:を使用したものについて

public IQueryable<Products> GetAllTickets() 
{ 
    return myDB.products; 
} 

しかし、何が他のクラスからメソッドを使用してナビゲーションプロパティやクエリを通じてに参加しますか?例:

この方法は、特定の日付までに却下製品を検索(日付はDBに文字列として格納されている)、および私が作成DateUtilitiesクラスを使用:

public IQueryable<Products> GetProductsDismissed(DateTime date) 
{ 
     return myDB.products.Where(m => (string.IsNullOrEmpty(m.ProductDismissDate) || 
             Equals(m.ProductDismissDate, "-")) ? false : 
       (DateTime.Compare(date, DateUtilities.ConvertToDateTime(m.ProductDismissDate)) > 0)); 
} 

この方法は、の結合を実行製品を構成するすべての部分を取得するナビゲーションプロパティを使用して(存在すると仮定多くの関係1):

public IQueryable<Products> GetAllProductParts(int productId) 
    { 
     return myDB.products.Where(m => Equals(m.ProductId, productId)); 
    } 

リポジトリクラスに実装するか、またはサービスレイヤーに移動する方が良いですか?

答えて

1

リポジトリは永続性レイヤーをカプセル化します。データベースに関連するすべてのものをそこに実装するのが普通です。実際の実装ではアプリケーションの残りの部分では問題ありません。そのため、最初はリポジトリを使用しています。私が変更することを提案する唯一のことは、IQueryableではなく、IEnumerableを直接返すことです。

違いはありますが、この場合はIQueryableを使用することで将来的に永続性アクセスを変更することが困難になることを意味します(micro ormに切り替えたり、 IQueryableをサポートしていない、または単にクラウドストレージを使用しているなど)。

関連する問題