为了账号安全,请及时绑定邮箱和手机立即绑定

重构数据访问层

重构数据访问层

C#
天涯尽头无女友 2021-06-23 17:01:32
数据访问层目前重复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 上找到一个预先构建的数据库层并使用它。


查看完整回答
反对 回复 2021-06-26
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信