.net 没有接口的存储库模式
在没有接口的情况下实现存储库模式有什么坏处 存储库类.net 没有接口的存储库模式,.net,nhibernate,design-patterns,repository,.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>
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;
}
}
}
公共类WebRepository
{
私有只读类型persitentType=typeof(T);
公共虚拟T GetById(int id)
{
返回NHibernateSession.Get(id);
}
公共虚拟列表GetAll()
{
返回GetByCriteria();
}
公共列表GetByCriteria(参数ICriterion[]标准)
{
ICriteria-criteria=NHibernateSession.CreateCriteria(persitentType);
foreach(标准中的ICriterion标准)
标准。添加(标准);
将criteria.List()作为列表返回;
}
公共T保存(T实体)
{
NHibernateSession.Save(实体);
返回实体;
}
公共T存储或更新(T实体)
{
NHibernateSession.Update(实体);
返回实体;
}
公共作废删除(T实体)
{
删除(实体);
}
私人网络会话
{
收到
{
返回SessionManager.CurrentSession;
}
}
}
如果我们想扩展我们使用的存储库
ProductRepository:存储库和重写器\扩展方法
我知道界面让我们:
- 使用TDD方法
- 更换持久性引擎
IRepository、IProductRepository
)还有什么其他优势呢
谢谢,Andrew在没有接口的情况下实现存储库模式没有什么不好的,您是否需要使用接口取决于您自己
正如您所说的,使用接口的好理由是保持持久性层从业务逻辑层抽象出来,当然也是为了更易于测试。但是,如果您可以guarentee您不会更改后端(或者至少您不能预见它在不久的将来会发生更改),并且您不打算编写测试(大错误),那么您可能没有必要使用接口
我看到的危险信号是“没有足够的时间编写测试”。现在可能是这样,但是将来你有时间的时候呢?同样,这是您的决定,但是,如果我是您,我会使用接口(即使您根本没有编写测试),因为它不会对您的代码造成任何伤害,也不会占用那么多时间这样做,并且如果您确实决定切换后端或编写测试,在将来为您节省很多麻烦。Mocking由于某些原因,您的数据库可能无法访问,通过使用该接口,您可以非常轻松地在真实数据和虚拟数据之间切换。您没有足够的时间编写测试吗?我希望你有很多时间进行调试!依赖注入是使用接口的另一个很好的理由+一个好答案