我正在尝试理解单一职责原则(SRP)。它说,一个班级应该只有一个责任和改变的理由。这是下面的典型存储库。这是否意味着每个项目都应该属于自己的类?当前插入,删除,搜索都在1类中吗?如果是这样,为什么人们不将所有项目都分成多个类别?
public class BaseRepository<TEntity> : IRepository<TEntity> where TEntity : class
{
private readonly DbContext _dbContext;
public BaseRepository(DbContext dbContext)
{
_dbContext = dbContext;
}
public void Insert(TEntity entity)
{
_dbContext.Set<TEntity>().Add(entity);
_dbContext.SaveChanges();
}
public void Delete(TEntity entity)
{
_dbContext.Set<TEntity>().Remove(entity);
_dbContext.SaveChanges();
}
public IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate)
{
return _dbContext.Set<TEntity>().Where(predicate);
}
public IQueryable<TEntity> GetAll()
{
return _dbContext.Set<TEntity>();
}
public TEntity GetById(int id)
{
return _dbContext.Set<TEntity>().Find(id);
}
}
答案 0 :(得分:0)
问题:此存储库类的职责是什么?
answer :对数据库(CRUD)执行操作
更多阅读:http://pragmaticcraftsman.com/2006/07/single-responsibility-principle
答案 1 :(得分:0)
“我将重新说明您所说的关于SRP的内容。一个类应该只有一个更改的理由。Repository类的职责是对数据库执行操作(例如CRUD操作)。很多人感到困惑认为一个类应该只包含一个方法,但这不是罗伯特·马丁描述的...有很多方法,如果仅是四个粗略方法,则将它们留在一个中就可以了,如果您有更新/插入/删除和许多(5+)次读操作,请考虑将其拆分为一个读写存储库。如果您有更多读/写操作,请考虑对每次写操作(命令,插入,更新,删除,批量删除等)应用CQRS和命令处理程序。操作和每个读取操作的查询处理程序–“