And*_*kov 0 .net nhibernate design-patterns repository
没有接口实现存储库模式有什么不好?
存储库 - 类
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我们想扩展存储库,我们使用ProductRepository:Repository和overrider\extend方法.
我知道接口让我们:
但如果我不想替换我的nhibernate并且没有足够的时间来编写测试.那么使用经典存储库模式的其他优点是什么(带IRepository<T>, IProductRepository
)
谢谢,安德鲁
没有接口实现存储库模式没有什么不好,无论您是否觉得需要使用接口,都取决于您.
就像你已经说明使用接口的充分理由一样,要保持你的持久层从业务逻辑层中抽象出来,当然也是为了更容易测试.但是,如果你能保证你不会改变你的后端(或者至少你不能预见它在不久的将来会改变)并且你不打算写测试(大错误)那么你可能根本不需要使用接口.
我看到的红旗是" 没有足够的时间来编写测试 ".这可能是现在的情况,但是,当你对将来有什么做有时间吗?同样,这是你的决定,但是,如果我是你,我会使用接口(即使你根本没有编写测试),因为它不会对你的代码造成任何伤害,也不会花费那么多时间来做如果您决定切换后端或编写测试,将来可以省去很多麻烦.
归档时间: |
|
查看次数: |
287 次 |
最近记录: |