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

时间:2018-10-13 06:58:05

标签: c# asp.net-core single-responsibility-principle

我正在尝试理解单一职责原则(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);
    }
}

2 个答案:

答案 0 :(得分:0)

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

answer :对数据库(CRUD)执行操作

更多阅读:http://pragmaticcraftsman.com/2006/07/single-responsibility-principle

答案 1 :(得分:0)

“我将重新说明您所说的关于SRP的内容。一个类应该只有一个更改的理由。Repository类的职责是对数据库执行操作(例如CRUD操作)。很多人感到困惑认为一个类应该只包含一个方法,但这不是罗伯特·马丁描述的...有很多方法,如果仅是四个粗略方法,则将它们留在一个中就可以了,如果您有更新/插入/删除和许多(5+)次读操作,请考虑将其拆分为一个读写存储库。如果您有更多读/写操作,请考虑对每次写操作(命令,插入,更新,删除,批量删除等)应用CQRS和命令处理程序。操作和每个读取操作的查询处理程序–“