【发布时间】: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