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

Lind.DDD.UoW~方法回調完成原子化操作

回到目錄

本文來自于實踐中的不足

在(zai)最近(jin)開始過程中,遇到(dao)了一個(ge)(ge)問題,之前設(she)計的工(gong)作(zuo)(zuo)單元UoW只支持Insert,Update,Delete三(san)(san)種(zhong)(zhong)操作(zuo)(zuo),即開發人員可(ke)以將(jiang)以上(shang)三(san)(san)種(zhong)(zhong)操作(zuo)(zuo)同時(shi)扔進工(gong)作(zuo)(zuo)單元,由工(gong)作(zuo)(zuo)單元UoW負責事件的處理,這種(zhong)(zhong)設(she)計已(yi)經出現很多年了,大叔(shu)感覺也是不(bu)錯,思路就是在(zai)工(gong)作(zuo)(zuo)單元里添加三(san)(san)個(ge)(ge)字(zi)典對(dui)象,用來存儲(chu)你的Insert,Update,Delete操作(zuo)(zuo),然(ran)后在(zai)commit時(shi),統一進行(xing)提交!

業務中完成的體現

在調試中,集成了select方法,即當添加,更新之后,你把最新數據拿到,并進行下一個業務的操作,這個過程中,拿數據也(ye)需要在(zai)(zai)事(shi)務中完成,而之前的(de)設計是(shi)不支持這(zhe)個功能(neng)的(de),可以說是(shi)個缺陷(xian),本講(jiang)主要是(shi)解決了這(zhe)個問題(ti),在(zai)(zai)業務層(ceng),可以使用(yong)嵌套的(de)注(zhu)入(ru)來表示,代碼一段如下:

       uow.RegisterChangeded(entity, SqlType.Insert, repository, (newEntity) =>
            {
                var old = repository.GetModel().FirstOrDefault(o => o.ID == entity.ID);
                old.DataCtrlName = "Name|Email";
                uow.RegisterChangeded(old, SqlType.Update, repository);
            });
            uow.Commit();

從上面代碼中,我們看到了,在Insert方法里,有一個GetModel(),然后對實體進行賦值后,又調用了Update,這樣就形成了一個Insert與update的嵌套,這里是使用了工(gong)作單元的嵌套.

對UoW的注冊方法的修改

     /// <summary>
        /// 注冊數據(ju)變更實體
        /// </summary>
        /// <param name="entity">實體類型</param>
        /// <param name="type">SQL類型</param>
        /// <param name="repository">倉儲</param>
        /// <param name="action">方法回調</param>
        public void RegisterChangeded(
            IEntity entity,
            SqlType type,
            IUnitOfWorkRepository repository,
            Action<IEntity> action = null)
        {

            switch (type)
            {
                case SqlType.Insert:
                    insertEntities.Add(entity, new Tuple<IUnitOfWorkRepository, Action<IEntity>>(repository, action));
                    break;
                case SqlType.Update:
                    updateEntities.Add(entity, new Tuple<IUnitOfWorkRepository, Action<IEntity>>(repository, action));
                    break;
                case SqlType.Delete:
                    deleteEntities.Add(entity, new Tuple<IUnitOfWorkRepository, Action<IEntity>>(repository, action));
                    break;
                default:
                    throw new ArgumentException("you enter reference is error.");
            }
        }

工作單元字典添加委托元素

  private IDictionary<IEntity, Tuple<IUnitOfWorkRepository, Action<IEntity>>> insertEntities;
  private IDictionary<IEntity, Tuple<IUnitOfWorkRepository, Action<IEntity>>> updateEntities;
  private IDictionary<IEntity, Tuple<IUnitOfWorkRepository, Action<IEntity>>> deleteEntities;

下面是程序運行后的截圖,我們可以看到,整個過程是在serializable級(ji)別(bie)的事(shi)務里的,即最高的事(shi)務級(ji)別(bie)!

對于知識的總結與研究很重要,有時,我們對一個事物一定要有較真的精神,我經常這樣對我兒子說,學英語,一定要較真

感謝各位的閱讀!

回到目錄

posted @ 2016-06-24 15:45  張占嶺  閱讀(1635)  評論(0)    收藏  舉報