2009-12-05 61 views
31

我已經看到了兩種不同的創建通用資源庫的方法。這兩種方法(利弊)有什麼區別? 請diregard差異的方法,因爲我感興趣的通用資源庫 - IRepository <T>或IRepository

public interface IRepository<T> where T : class 

public interface IRepository : IDisposable 

之間也是有差別的在功能性,靈活性,單元測試有什麼區別...?我會得到或失去什麼?
它們在依賴注入框架中註冊的方式有什麼不同嗎?

選項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<T>被綁定到單個類型而一個IRepository潛在地綁定到多個類型。哪一個適合高度依賴於你的特定場景。

一般來說我覺得IRepository<T>更有用。在使用時,它非常清楚IRepository<T>的內容是什麼(T)。另一方面,從給定的IRepository中不能清楚地知道它裏面包含了什麼。

在需要存儲多種類型對象的情況下,我通常會創建IRepository<T>實例的映射。例如:Dictionary<T,IRepository<T>>

+5

當我的實體有非常不同的方法時,我不建議爲每個實體實施IRepository ,因爲每個實體都會有一個空的實現,它可能根本不會使用。 只有當你的實體有很多常用的方法時,你的Repository類纔會最終包含空方法才能執行IRepository 。 – msfanboy 2010-05-18 08:56:31

+2

我不認爲一個空洞的方法就像一個巨大的,世界末日的太陽天才一樣危險。 – ProfK 2013-03-10 10:31:04