【问题标题】:Single Responsibility Principle and Many methods in RepositoryRepository中的单一职责原则和多种方法
【发布时间】:2018-10-14 01:42:10
【问题描述】:

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

【问题讨论】:

  • 这个类的唯一职责是对数据库执行 CRUD
  • 这就是我所说的,创建、读取、更新、删除,好像是 4 个项目
  • 在软件方面,诸如责任之类的事情可以以适合实际情况的方式来考虑。没有什么能阻止你分成不同的班级——但维护起来会很痛苦
  • 您也可以说“存储库类的职责是什么?” - 回答“CRUD”
  • 我不会太担心存储库和 SRP,我更担心的是构建已经在实体框架中为您实现的另一个级别的抽象和复杂性。它已经是存储库/UOW

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


【解决方案1】:

“我想将你所说的关于 SRP 的内容重新表述为存在。一个类应该只有一个改变的理由。Repository 类的职责是对数据库执行操作(例如 CRUD 操作)。很多人会感到困惑认为一个类应该只包含一个方法,但这不是 Robert Martin 所描述的......有很多方法,如果它只是 4 个 crud 方法,把它们放在一个中,这很好。如果你有更新/插入/删除和许多(5+)读取操作,考虑将其拆分为读写存储库。如果您有更多的读/写操作,请考虑为每次写入(插入、更新、删除、批量删除等)应用带有命令处理程序的 CQRS每个读取操作的操作和查询处理程序——"

【讨论】:

    【解决方案2】:

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

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

    进一步阅读:http://pragmaticcraftsman.com/2006/07/single-responsibility-principle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 2016-07-31
      • 1970-01-01
      • 2013-03-16
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多