没有接口实现存储库模式有什么不好?
存储库 - 类
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:Repository和overrider \ extend方法。
我知道接口让我们:
但如果我不想替换我的nhibernate并且没有足够的时间来编写测试。那么使用经典存储库模式(使用IRepository<T>, IProductRepository
)
谢谢,安德鲁
答案 0 :(得分:6)
没有关于在没有接口的情况下实现存储库模式的错误,无论您是否觉得需要使用接口,都由您决定。
就像你已经说明使用接口的充分理由一样,要保持你的持久层从业务逻辑层中抽象出来,当然也是为了更容易测试。但是,如果您可以保证,您将不会改变您的后端(或者至少您不能预见它在不久的将来会发生变化)并且您不打算编写测试(大错误)然后可能没有必要使用接口。
我看到的红旗是“没有足够的时间来编写测试”。现在可能就是这种情况,但是,当你做将来有什么时候呢?同样,这是你的决定,但是,如果我是你,我会使用接口(即使你根本没有编写测试),因为它不会对你的代码造成任何伤害,也不会花费那么多时间来做如果您决定切换后端或编写测试,将来会为您节省很多麻烦。
答案 1 :(得分:0)
嘲讽!
由于某些原因,您的数据库可能无法访问,通过使用界面,您可以非常轻松地在实际数据和虚拟数据之间切换。