单一责任原则和存储库中的多种方法



我试图理解单一责任原则(SRP(。它说一个班级应该只有一个责任和理由来改变。这是下面一个典型的存储库。这是否意味着,每个项目都应该是它自己的类?目前插入,删除,搜索,都在一个类?如果是这样的话,为什么人们不将所有项目分成多个类呢?

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);
}
}

"我会改写你所说的SRP成为现实。一个类应该只有一个更改的理由。存储库类的职责是针对数据库执行操作(例如 CRUD 操作(。许多人认为一个类应该只包含一个方法会感到困惑,但这不是罗伯特·马丁所描述的......有很多方法,如果只是 4 种 crud 方法,将它们放在一个中,这很好。如果您有更新/插入/删除和许多 (5+( 读取操作,请考虑将其拆分为读取和写入存储库。如果有更多的读/写操作,请考虑为每个写入(插入、更新、删除、批量删除等(操作应用带有命令处理程序的 CQRS,并为每个读取操作应用查询处理程序 –">

问题:这个存储库类的职责是什么?

答:对数据库执行操作 (CRUD(

延伸阅读: http://pragmaticcraftsman.com/2006/07/single-responsibility-principle

最新更新