2009-12-05 14 views
31

Widziałem dwa różne podejścia do tworzenia repozytoriów generycznych. Jakie są różnice między tymi dwoma podejściami (za i przeciw)? Proszę diregard różnicę w metodach, bo jestem zainteresowany różnicy międzyGeneric repozytorium - IRepository <T> lub IRepository

public interface IRepository<T> where T : class 

i

public interface IRepository : IDisposable 

Czy jest jakaś różnica w funkcjonalności, elastyczności, testów jednostkowych ...? Co otrzymam lub stracę?
Czy jest jakaś różnica w jaki sposób są one rejestrowane w zależności ram wtryskowe?

Wariant 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(); 
} 

Wariant 2

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

Odpowiedz

27

Podstawową różnicą jest to, że IRepository<T> jest związany z jednym rodzajem natomiast IRepository potencjalnie związana z wielu typów. Która z nich jest odpowiednia, w dużym stopniu zależy od konkretnego scenariusza.

Generalnie uważam IRepository<T> być bardziej użyteczne. W momencie użycia jest bardzo jasne, co to jest zawartość (IRepository<T>). Z drugiej strony nie jest jasne, z danego IRepository, co jest zawarte w środku.

W przypadkach, gdy mam do przechowywania wielu typów obiektów, zwykle utworzyć mapę IRepository<T> przypadkach. Na przykład: Dictionary<T,IRepository<T>>.

+5

Kiedy moi podmioty mają bardzo różne metody nie polecam realizacji IRepository dla każdej jednostki, ponieważ każda jednostka będzie wtedy mieć pusty wdrożenie metody, które nie mogą używać w ogóle. Do IRepository tylko wtedy, gdy podmioty mają wiele wspólnych metod indziej repozytorium klas skończy zawierający pustych metod. – msfanboy

+2

Nie sądzę, że pusta metoda jest tak niebezpieczna jak gigantyczna, kończąca świat energia słoneczna. – ProfK

Powiązane problemy