我正在理解 c# 中的存储库模式。当我研究通用存储库模式时,我很困惑。里面有很多重复。我对这种模式有一些疑问。
我正在使用实体框架代码优先方法,并且我有两个模型类
学生
教师
例如,如果我有一个通用接口,我将使用多少个通用接口
public interface IRepository<TEntity>
{
IQueryable<TEntity> FindAll(Expression<Func<TEntity, bool>> where = null);
TEntity FindOne(Expression<Func<TEntity, bool>> where = null);
}
所以这个接口可以在两个模型类中使用。如果学生类有更多的方法,我可以在哪里定义这些方法?例如
public class StudentRepo<TEntity> : IRepository<TEntity> where TEntity : class
{
public virtual IQueryable<TEntity> FindAll(Expression<Func<TEntity, bool>> where = null)
{
return null != where ? Context.Set<TEntity>().Where(where) : Context.Set<TEntity>();
}
public virtual TEntity FindOne(Expression<Func<TEntity, bool>> where = null)
{
return FindAll(where).FirstOrDefault();
}
public void update()
{
}
public int FindId()
{
}
}
所以我添加了两个新方法update()
,我FindId()
在StudentRepo
哪里可以定义这些方法?
如果我想添加这两个方法,IRepository
那么我必须为教师类调用这些方法。它有什么好处?如果我为两个类创建单独的接口,这是更好的方法吗?像 IStudent 和 ITeacher 这样我就可以定义那些我想使用的方法,并且不会使用不必要的方法。
请指导我,我很困惑。