Принцип единой ответственности и множество методов в репозитории - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь понять Принцип единой ответственности (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 голосов
/ 13 октября 2018

"Я бы перефразировал то, что вы сказали о SRP. У класса должен быть только ОДИН повод для изменения. Ответственность за класс Repository заключалась бы в выполнении операций с базой данных (например, операций CRUD). Многие люди путаютсядумая, что класс должен содержать только один метод, но это не то, что описывает Роберт Мартин ... Существует множество способов, если это всего лишь 4 метода crud, оставить их в одном, и это нормально. Если у вас есть update / insert / deleteи многие (5+) операций чтения, рассмотрите возможность их разделения в хранилище для чтения и записи. Если у вас намного больше операций чтения / записи, подумайте о применении CQRS с обработчиками команд для каждой записи (вставка, обновление, удаление, массовое удаление и т. д.)Операция и обработчики запросов для каждой операции чтения - "

0 голосов
/ 13 октября 2018

вопрос : каковы обязанности этого класса хранилища?

ответ : выполнить операции с базой данных (CRUD)

далеечтение: http://pragmaticcraftsman.com/2006/07/single-responsibility-principle

...