• 关于 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,这里提供一个思路。

  • 相关阅读:
    Iview多行表单增删、表单校验
    Linux常用命令+Git命令
    前端架构师图谱
    第八章学习心得
    第七章学习心得
    第6章学习心得
    第5章学习总结
    第四章心得体会
    第三章学习心得
    第二章学习心得
  • 原文地址:https://www.cnblogs.com/yuanhuaming/p/1596503.html
Copyright © 2020-2023  润新知