2009-12-05 2 views
31

일반 저장소를 만드는 두 가지 다른 접근 방식을 보았습니다. 이 두 가지 접근 방식 (장단점)의 차이점은 무엇입니까? 내가일반 저장소 - IRepository <T> 또는 IRepository

public interface IRepository<T> where T : class 

public interface IRepository : IDisposable 

의 차이에 관심이 있기 때문에 기능, 유연성, 단위 테스트에서 어떤 차이가 있습니까 방법에 차이를 diregard하세요 ...? 나는 무엇을 얻거나 잃을 것인가?
Dependency Injection 프레임 워크에 등록 된 방법에 차이가 있습니까?

옵션 1

public interface IRepository<T> where T : class 
{ 
     T Get(object id); 
     void Attach(T entity); 
     IQueryable<T> GetAll(); 
     void Insert(T entity); 
     void Delete(T entity); 
     void SubmitChanges(); 
} 

옵션 2

public interface IRepository : IDisposable 
    { 
     IQueryable<T> GetAll<T>(); 
     void Delete<T>(T entity); 
     void Add<T>(T entity); 
     void SaveChanges(); 
     bool IsDisposed(); 
    } 

답변

27

가장 큰 차이는 IRepository 잠재적으로 여러 타입으로 바인딩하면서 IRepository<T> 단일 입력에 결합된다는 점이다. 적합한 시나리오는 특정 시나리오에 크게 좌우됩니다.

일반적으로 나는 IRepository<T>이 더 유용하다고 생각합니다. 사용시에는 IRepository<T>의 내용이 (T) 무엇인지 분명합니다. 반면에 그 안에 들어있는 내용은 주어진 IRepository에서 명확하지 않습니다.

여러 유형의 개체를 저장해야하는 경우 일반적으로 IRepository<T> 인스턴스의지도를 만듭니다. 예 : Dictionary<T,IRepository<T>>.

+5

내 엔티티가 매우 다른 방법을 사용하는 경우 모든 엔티티에 전혀 사용하지 않을 수있는 메소드 구현이 없으므로 모든 엔티티에 대해 IRepository 을 구현하지 않는 것이 좋습니다. 엔티티가 일반적인 방법이 많은 경우에만 IRepository 을 수행하십시오. 그렇지 않으면 저장소 클래스가 빈 메소드를 포함하게됩니다. – msfanboy

+2

나는 공허한 방법이 거대한 세계 결말 태양풍만큼 위험하다고 생각하지 않습니다. – ProfK

관련 문제