将近一年后,我开始了一个新的 mvc 项目,这次是版本 4。我想知道以下存储库模式的实现是否弊大于利。
public interface IRepository<T> where T : class
{
IEnumerable<T> GetAll();
IQueryable<T> Query(Expression<Func<T, bool>> filter);
void Add(T entity);
void Remove(T entity);
}
public interface IUnitOfWork
{
void Commit();
}
public interface IDbContext : IDisposable
{
IDbSet<T> Set<T>() where T : class;
int SaveChanges();
}
public class DbContextAdapter : IDbContext
{
private readonly DbContext _myRealContext;
public DbContextAdapter()
{
this._myRealContext = new EstafaContext();
}
public void Dispose()
{
_myRealContext.Dispose();
}
public IDbSet<T> Set<T>() where T : class
{
return _myRealContext.Set<T>();
}
public int SaveChanges()
{
return _myRealContext.SaveChanges();
}
}
public class SqlRepository<T> : IRepository<T> where T : class
{
private IDbSet<T> _dbSet;
public SqlRepository(IDbContext dbContext)
{
this._dbSet = dbContext.Set<T>();
}
public IEnumerable<T> GetAll()
{
return this._dbSet.ToList();
}
public IQueryable<T> Query(Expression<Func<T, bool>> filter)
{
return this._dbSet.Where(filter);
}
public void Add(T entity)
{
this._dbSet.Add(entity);
}
public void Remove(T entity)
{
this._dbSet.Remove(entity);
}
}
public class SqlUnitOfWork : IDisposable, IUnitOfWork
{
private IDbContext _dbContext;
private SqlRepository<Cliente> _clientes ;
public SqlUnitOfWork()
{
this._dbContext = new DbContextAdapter();
}
public void Dispose()
{
if (this._dbContext != null)
{
this._dbContext.Dispose();
}
GC.SuppressFinalize(this);
}
public IRepository<Cliente> Clientes
{
get { return _clientes ?? (_clientes = new SqlRepository<Cliente>(_dbContext)); }
}
public void Commit()
{
this._dbContext.SaveChanges();
}
}
这样,我可以通过 SqlUnitOfWork 从一个点管理所有存储库。我在之前的项目中使用过这种设计,效果很好,但我觉得它效率不高,可能是多余的。添加这样一个抽象层值得吗?
提前致谢!