中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

Lind.DDD.Domain.IOwnerBehavor對(dui)實體的意義

回到目錄

對于Lind.DDD架構,我之前寫了不少文章,對于它的Domain模式也介紹了不少,像之前的IEntity,ILogicDeleteBehavor,IModifyBehavor,IStatusBehavor和ISortBehavor都有自己的功能,只要實體實現對外的接口,就具有了某種特性或者某種功能,而今天主要說一下擁有者接口,IOwnerBehavor,它主要用在管理系統的實體中,如一個員工資產表,當這個員工離職后,它對應資產將被進行轉移,轉移到一個新的用戶身上,而這個用戶就是這個資產的新擁有者

擁有者接口

    /// <summary>
    /// 擁(yong)有者行(xing)為
    /// </summary>
    public interface IOwnerBehavor
    {
        /// <summary>
        /// 擁(yong)有者Id
        /// </summary>
        int OwnerId { get; set; }
    }

實體繼承它

  /// <summary>
    /// 操作日志
    /// </summary>
    [TableAttribute("WebLogger")]
    public partial class WebLogger : Lind.DDD.Domain.Entity, Lind.DDD.Domain.IOwnerBehavor
    {
        /// <summary>
        /// 操作者(zhe)ID
        /// </summary>
        [DisplayName("操作者ID")]
        public int UserId { get; set; }
        /// <summary>
        /// 操作者
        /// </summary>
        [DisplayName("操作者")]
        public string UserName { get; set; }
        /// <summary>
        /// 控制器名稱
        /// </summary>
        [DisplayName("控制器(qi)")]
        public string ControllerName { get; set; }
        /// <summary>
        /// Action名(ming)稱
        /// </summary>
        [DisplayName("Action")]
        public string ActionName { get; set; }
        /// <summary>
        /// 操作權限(xian)
        /// </summary>
        [DisplayName("操作權限")]
        public string Authority { get; set; }
        /// <summary>
        /// 當前請求的Get和(he)Post參(can)數JSON串
        /// </summary>
        [DisplayName("請求參(can)數")]
        public string RequestParams { get; set; }
        /// <summary>
        /// 功能說明
        /// </summary>
        [DisplayName("功能說明(ming)")]
        public string Description { get; set; }


        #region IOwnerBehavor 成員

        public int OwnerId
        {
            get;
            set;
        }

        #endregion
    }

Lind.DDD.Manager集成它

功能主要有(you)(you)(you)兩(liang)個:修(xiu)改單獨表的擁有(you)(you)(you)者和修(xiu)改所有(you)(you)(you)表的擁有(you)(you)(you)者,如張三走了,由李四(si)接管,這時我們通過擁有(you)(you)(you)者接口(kou)就可以很(hen)方便的實現!

   /// <summary>
    /// 擁有者控制器(qi)
    /// </summary>
    public class OwnerController : Controller
    {
        /// <summary>
        /// 具有擁有者字段的數據表
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            return View(Lind.DDD.Utils.AssemblyHelper.GetTypeNamesByInterfaces(typeof(IOwnerBehavor)));
        }

        /// <summary>
        /// 更(geng)新指定表的擁有者字段(duan)
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public ActionResult Edit(string name)
        {
            ViewBag.Name = string.IsNullOrWhiteSpace(name) ? "全部表(biao)" : name;
            return View();
        }

        /// <summary>
        /// 更新表(biao)字段(duan)
        /// </summary>
        /// <param name="name"></param>
        /// <param name="val"></param>
        /// <param name="newVal"></param>
        void UpdateTable(string name, int oldVal, int newVal)
        {
            var type = AssemblyHelper.GetEntityTypeByName(name);
            Type reposType = typeof(ManagerEfRepository<>);
            var objType = reposType.MakeGenericType(type);
            object o = Activator.CreateInstance(objType);
            var entity = objType.InvokeMember("GetModel", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, null);
            var atest = (IEnumerable)entity;

            var newList = (IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(type));

            foreach (var item in atest)
            {
                if ((int)type.GetProperty("OwnerId").GetValue(item) == oldVal)
                {
                    var a = Convert.ChangeType(item, type);
                    type.GetProperty("OwnerId").SetValue(item, newVal);
                    newList.Add(item);
                }
            }

            objType.InvokeMember("BulkUpdate", BindingFlags.Default | BindingFlags.InvokeMethod, null, o, new object[] { newList, "OwnerId" });
        }
        [HttpPost]
        public ActionResult Edit(string name, FormCollection collection)
        {
            try
            {
                int oldVal;
                int.TryParse(collection["oldValue"], out oldVal);
                int val;
                int.TryParse(collection["newValue"], out val);

                if (string.IsNullOrWhiteSpace(name))//全部表(biao)
                {
                    foreach (var type in AssemblyHelper.GetTypeNamesByInterfaces(typeof(IOwnerBehavor)))
                    {
                        UpdateTable(type, oldVal, val);
                    }
                }
                else
                {
                    UpdateTable(name, oldVal, val);
                }

                return RedirectToAction("Index");
            }
            catch
            {
                throw;
            }
        }


    }

Lind.DDD.Manager運行結果

經過上面操作后,靈氣表WebLogger里的OwnerId字段將由1變更為11,這(zhe)就是(shi)面(mian)向接(jie)口的(de)魅力,我們將某(mou)種特征(zheng)(zheng)抽(chou)象成接(jie)口,方便以(yi)后(hou)對這(zhe)種特征(zheng)(zheng)進行統一的(de)管理!

感謝各(ge)位的閱讀!

 回到目錄

posted @ 2016-09-20 22:31  張占嶺  閱讀(850)  評論(0)    收藏  舉報