1

私はリポジトリパターン(Linq2SQLまたはEF)について多くの読書を行ってきました。私はFindUserByNameのようないくつかの特定のクエリを持ついくつかのリポジトリを見てきました。リポジトリにwhere式を渡します。リポジトリ内の特定のクエリ

一方、私はちょうど "保存、更新、GetAll"といくつかのリポジトリを見て、GetAllはIQueryableを返します。また、このIQueryableはサービス層でフィルタリングされます。

あなたの意見では、特定のクエリをリポジトリに渡すか、できるだけ単純にして、すべてのフィルタを有効にしておくとよいでしょうか?

ありがとうございます!

答えて

2

私の助言は、基本的な方法(FindSaveDeleteなど)を持つGenericRepository<T>を作成することです。

例:

public abstract class GenericRepository<T> : IRepository<T> where T : class 
{ 
    public T FindSingle(Expression<Func<T,bool>> predicate) { .. }; 
    public IQueryable<T> Find() { .. }; 
    public void Delete(T entity) { .. };  
} 

はその後、特殊なメソッドを作成するために、一般的なものから継承する特定のリポジトリを作成します。

例:

public class EmployeeRepository : GenericRepository<Employee>, IRepository<Employee> 
{ 
    public Employee FindByLastName(string lastName) 
    { 
     return FindSingle(emp => emp.LastName == lastName); 
    } 

    public ICollection<Employee> FindAllManagers() 
    { 
     return Find().Where(emp => emp.Type == "Manager").ToList(); 
    } 

    // other methods... 
} 

は、あなたがあなたのリポジトリ全体で共通のコードを複製していないことを意味します。

はい、もう1つの方法は、GenericRepository<T>で機能するサービスを利用することです。これは、サービスが(本質的に)専門のリポジトリであることを意味します。

サービスレイヤーや専用リポジトリーが必要な場合は、これが重要です。

+0

こんにちは...私はあなたについてのいくつかの考えを持っているでしょう!ありがとう!! – AndreMiranda

関連する問題