数据访问层目前重复3个功能:创建、获取、设置。上几个 Dlo 类型:Foo、Bar、FooBar。其中 Foo 和 FooBar 具有相同的实现,而 Bar 具有更复杂的实现。public static bool CreateFooBar(FooBarDlo newFooBar){ bool result = false; using (var db = new FooModelDBcontext()) { db.FooBars.Add(newFooBar); result = db.SaveChanges() > 0; } return result;}public static FooBarDlo GetCustomer(int idFooBar){ FooBarDlo result; using (var db = new FooModelDBcontext()) { result = db.FooBars.FirstOrDefault(x => x.Id == idFooBar); } return result;}public static bool SetCustomer(FooBarDlo newFooBar){ bool result = false; using (var db = new FooModelDBcontext()) { var temp = db.FooBars.SingleOrDefault(x => x.Id == newFooBar.Id); db.Entry(temp).CurrentValues.SetValues(newFooBar); result = db.SaveChanges() > 0; } return result;}如何重构这些,同时保持Bar实现的特性?
1 回答
LEATH
TA贡献1936条经验 获得超6个赞
有几种方法可以解决这个问题。
您可以提供一个基类,该基类将泛型作为所有虚拟方法的参数(伪代码)
public abstract class DbLayer<T> {
public virtual T Get(int Id) {
// default implementation here
// but virtual allows overriding
}
public virtual T Create(T obj) {
// default implementation here
// but virtual allows overriding
}
}
public class FooBarDlo: DbLayer {
public override FooBarDlo Get(int Id) {
// override Get handling
}
}
但如果我是你,我会在 CodeProject 上找到一个预先构建的数据库层并使用它。
- 1 回答
- 0 关注
- 127 浏览
添加回答
举报
0/150
提交
取消