1

리포지토리 패턴 (Linq2SQL 또는 EF)에 대한 많은 정보를 읽었습니다. 어떤 구체적인 쿼리를 사용하는 리파지토리를 보았습니다. FindUserByName과 같이 저장소에 표현식을 전달할 곳이 있습니다.리포지토리의 특정 쿼리

반면에 "저장, 업데이트 및 GetAll"과 함께 일부 리포지토리를 보았으며 GetAll은 IQueryable을 반환합니다. 그리고이 IQueryable은 서비스 계층에서 필터링됩니다.

따라서 특정 쿼리를 저장소에 전달하거나 가능한 한 간단하게 모든 필터를 사용하도록하는 것이 좋을까요?

감사합니다.

답변

2

내 충고는 핵심 기본 방법 (Find, Save, Delete 등)이있는 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... 
} 

당신이 당신의 저장소에서 공통 코드를 복제하지 의미합니다.

네, 다른 대안은 GenericRepository<T>에서 작동하는 서비스를 갖는 것입니다. 이는 서비스가 (본질적으로) 전문화 된 저장소라는 것을 의미합니다.

서비스 계층 또는 전문 리포 지 토리를 원할 경우 우선 순위에 관한 문제입니다.

+0

흠 ... 나는 당신에 대해 생각해 보았습니다. 감사!! – AndreMiranda

관련 문제