ca9*_*3d9 9 c# orm design-patterns domain-driven-design repository-pattern
我试图使用ado.net实现存储库模式,因为平台有限.
public interface IGenericRepository<T> : IDisposable where T : class
{
IQueryable<T> GetAll();
IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
void Add(T entity);
void Delete(T entity);
void Edit(T entity);
void Save();
}
Run Code Online (Sandbox Code Playgroud)
如何完成以下抽象类......?
public abstract class GenericRepository<C, T> :
IGenericRepository<T>
where T : class
where C : IDbDataAdapter, new()
{
private C dbDataAdapter = new C();
protected C DB
{
get { return dbDataAdapter; }
set { dbDataAdapter = value; }
}
public virtual IQueryable<T> GetAll()
{
DataTable dt;
dbDataAdapter.fill(dt);
IQueryable<T> query = dt....?;
return query;
}
public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = dbDataAdapter.???Set<T>???().Where(predicate);
return query;
}
Run Code Online (Sandbox Code Playgroud)
更新:
我将通过固有的这两个接口/类来实现域指定的存储库.
public class FooRepository :
GenericRepository<FooBarEntities, Foo>, IFooRepository {
public Foo GetSingle(int fooId) {
var query = GetAll().FirstOrDefault(x => x.FooId == fooId);
return query;
}
}
Run Code Online (Sandbox Code Playgroud)
拥有通用存储库通常不是一个好主意.存储库是一个重要的域概念,您不希望过度概括它,就像您不想概括您的实体一样.通用存储库是CRUDy,将焦点从您的域转移.请考虑Greg Young的这篇文章.
在相关的说明中,除了使代码更少域和更多数据驱动之外,公开IQueryable还会引入紧耦合.
| 归档时间: |
|
| 查看次数: |
8574 次 |
| 最近记录: |