关于 Repository 在BIZ层的应用

利用Repository模式统一业务层接口,对UI层进行统一调用。下面是我的一个构想

1.Repository代码

    public interface BaseBizObject<TModel>
    {
        List<TModel> GetObjects(NameValueCollection collection);
        TModel GetObject(object id);
        void Add(TModel model);
        void Update(TModel model);
        void LogicDelete(object id);
        void Delete(Expression<Func<TModel, bool>> predicate);
    }

2.继承类代码 ,对接口的实现。了解的话可以忽略这段代码,重点是在UI层的应用

    public class BaseBizObjectImpl<TModel> : BaseBizObject<TModel> where TModel : class
    {
        public virtual List<TModel> GetObjects(NameValueCollection collection)
        {
            throw new System.NotImplementedException();
        }

        public TModel GetObject(object id)
        {
10             return DaoAccess.Instance<TModel>().GetById(Int32.Parse(id.ToString()));
11         }
12
13         public void Add(TModel model)
14         {
15             DaoAccess.Instance<TModel>().Add(model);
16         }
17
18         public void Update(TModel model)
19         {
20             DaoAccess.Instance<TModel>().SubmitChanges();
21         }
22
23         public void LogicDelete(object id)
24         {
25             DaoAccess.Instance<TModel>().SubmitChanges();
26         }
27
28         public void Delete(Expression<Func<TModel, bool>> predicate)
29         {
30             DaoAccess.Instance<TModel>().Delete(predicate);
31         }
32     }
 
   Catalog 继承自 BaseBizObjectImpl
1     public class CatalogMgr : BaseBizObjectImpl<Catalog>
2     {
3         public override List<Catalog> GetObjects(NameValueCollection collection)
4         {
5             // collection 存放动态查询字段
6             return DaoAccess.Instance<Catalog>().GetAll().ToList();
7         }
8     }
 

3.UI层编辑页面的基类 

public abstract class BaseEditPage<TBiz, TEntity> : System.Web.UI.Page where TBiz : BaseBizObject<TEntity>, new()
{
    public BaseEditPage()
    {
        //
        //TODO: 在此处添加构造函数逻辑
        //
    }

10     protected  bool IsNew { get; set; }
11
12     protected abstract void PageInit();
13
14     protected abstract TEntity UpdateModel();
15
16     protected abstract void UpdateForm(TEntity entity);
17
18     protected override void OnLoad(System.EventArgs e)
19     {
20         base.OnLoad(e);
21         if (!IsPostBack)
22         {
23             PageInit();
24             object id = Request.QueryString["pkid"];
25             if (id == null)
26             {
27                 IsNew = true;
28             }
29             else
30             {
31                 TBiz obj = new TBiz();
32                 TEntity entity = obj.GetObject(id);
33                 UpdateForm(entity);
34             }
35         }
36     }

4.Catalog编辑页面

public partial class Admin_Catalog_EditCatalog : BaseEditPage<CatalogMgr,Catalog>
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected override void PageInit()
    {
10         IsNew = false;
11     }
12
13     protected override Catalog UpdateModel()
14     {
15         return ReflectForm<Catalog>.UpdateModel(Request.Form);
16     }
17
18     protected override void UpdateForm(Catalog entity)
19     {
20         ReflectForm<Catalog>.UpdateForm(this.form1,entity);
21     }
22
23     protected void btnSave_Click(object sender, EventArgs e)
24     {
25         if (!IsNew)
26         {
27             new CatalogMgr().Update(UpdateModel());
28         }
29         else
30         {
31             new CatalogMgr().Add(UpdateModel());
32         }
33     }
34     protected void btnCancel_Click(object sender, EventArgs e)
35     {
36         Response.Redirect("ListCatalog.aspx");
37     }
38     protected void btnDel_Click(object sender, EventArgs e)
39     {
40     }
41 }
42

如此如此这般这般,编辑页面的代码少了很多。列表页面同理可得。可能会碰到一个页面会编辑多个MODEL,这里提供一个思路。

原文地址:https://www.cnblogs.com/yuanhuaming/p/1596503.html