2011-12-18 46 views
0

沒有界面的倉庫模式有什麼不好?沒有界面的倉庫模式

庫 - 類

public class WebRepository<T> 
{ 
    private readonly Type persitentType = typeof(T); 
    public virtual T GetById(int id) 
    { 
     return NHibernateSession.Get<T>(id); 
    } 
    public virtual List<T> GetAll() 
    { 
     return GetByCriteria(); 
    } 
    public List<T> GetByCriteria(params ICriterion[] criterion) 
    { 
     ICriteria criteria = NHibernateSession.CreateCriteria(persitentType); 
     foreach (ICriterion criterium in criterion) 
      criteria.Add(criterium); 
     return criteria.List<T>() as List<T>; 
    } 
    public T Save(T entity) 
    { 
     NHibernateSession.Save(entity); 
     return entity; 
    } 
    public T SaveOrUpdate(T entity) 
    { 
     NHibernateSession.Update(entity); 
     return entity; 
    } 
    public void Delete(T entity) 
    { 
     NHibernateSession.Delete(entity); 
    } 
    private ISession NHibernateSession 
    { 
     get 
     { 
      return SessionManager.CurrentSession; 
     } 
    } 
} 

,如果我們想擴展庫,我們使用 ProductRepository:庫和超控器\擴展方法。

我知道接口讓我們:

  • 使用TDD方法
  • 更換持久性引擎

但是,如果我不想代替我NHibernate和沒有足夠的時間來寫測試。那麼,有什麼其他的優勢,使用經典庫模式(與IRepository<T>, IProductRepository

感謝,安德魯

+3

你沒有足夠的時間寫測試?我希望你有足夠的時間進行調試! – 2011-12-18 14:48:40

回答

6

沒有什麼有關實現存儲庫模式沒有接口,就看你是否覺得你需要使用接口與否。

就像你已經說明使用接口的很好的理由是保持你的業務邏輯層的持久層摘要,當然爲了更易於測試。但是,如果你可以保證你不會改變你的後端(或者至少你不能在不久的將來改變它)並且你不打算寫測試(大錯誤),那麼有可能不需要你使用接口。

雖然我看到的紅旗是「沒有足夠的時間來寫測試」。現在可能是這樣的情況,但是,如果你將來有什麼時間嗎?再次,這是你的決定,但是,如果我是你,我會使用接口(即使你根本沒有寫測試),因爲它不會損害你的代碼,也不會花那麼多時間去做,如果您決定切換後端或編寫測試,將來可爲您節省很多麻煩。

+0

依賴注入是使用接口的另一個好理由。 +1獲得很好的答案 – BZink 2011-12-18 15:22:49

0

嘲笑!
由於某些原因,您的數據庫可能無法訪問,並且通過使用界面,您可以非常輕鬆地在真實數據和虛擬數據之間切換。

+0

在我看來,我們需要它來進行測試? – 2011-12-18 17:27:45