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

基礎才是(shi)重中(zhong)之重~Data層(ceng)如(ru)何(he)調用(yong)BLL層(ceng)的方法(fa),如(ru)果(guo)覺得奇怪請看本文章

回到目錄

看似不倫不類

這(zhe)個(ge)題目有(you)(you)點(dian)不倫不類(lei),或者說(shuo)有(you)(you)點(dian)偽模式(shi)了,不錯(cuo),確實是這(zhe)樣,我們正(zheng)確的(de)(de)開發(fa)思維是WEB層(ceng)(ceng)->BLL層(ceng)(ceng)->DATA層(ceng)(ceng),每個(ge)層(ceng)(ceng)有(you)(you)對它下(xia)層(ceng)(ceng)的(de)(de)引(yin)用,下(xia)層(ceng)(ceng)不能引(yin)用上層(ceng)(ceng),因為(wei)這(zhe)會(hui)(hui)出現(xian)相互引(yin)用的(de)(de)錯(cuo)誤,在(zai)實際工作中,BLL層(ceng)(ceng)會(hui)(hui)有(you)(you)涉及到各個(ge)業務(wu)的(de)(de)代碼(ma)組織,實現(xian)數據(ju)持久化一般在(zai)Data層(ceng)(ceng)完成,這(zhe)是可以(yi)理解的(de)(de),也是我們經(jing)常使(shi)用的(de)(de)開發(fa)模式(shi),這(zhe)當然不是今天的(de)(de)重點(dian),今天主要說(shuo)一個(ge)實際問題,如訂單處理的(de)(de)場合.

一般訂單處理流程如下:

1 用戶選擇商品(pin)到購物車

2 用戶確定購買,生成訂單

3 選(xuan)擇一種或者幾種支付方式

4 支付(fu)完(wan)成(cheng),回寫訂單(dan),修改訂單(dan)狀態

5 支付交易成功,或者失(shi)敗

OK,這種(zhong)訂(ding)單業務事實上是很復(fu)雜(za)了(le),它會涉(she)及到(dao)很多表的(de)操作,它可能由(you)多個開(kai)發人員去編寫,最后進行統(tong)一組合(he),而為了(le)保證數據的(de)有效(xiao)性(xing),我們會把代碼(ma)重裝到(dao)事務里(li),這時問題就來了(le)

當你的訂單主方(fang)法在data層實(shi)現,如(ru)何去(qu)調用(yong)bll已經寫(xie)好的方(fang)法呢?我(wo)們總不能(neng)(neng)再重(zhong)新寫(xie)一個吧,當然不能(neng)(neng),相(xiang)同的代碼不能(neng)(neng)出現兩(liang)次,這(zhe)是我(wo)們的原則,呵呵.

方法回調

概念:我(wo)們在一(yi)個方法里處(chu)理事(shi)件,事(shi)件處(chu)理完成后,再調(diao)用(yong)原方法層次的(de)某(mou)個方法,這(zhe)種調(diao)用(yong),我(wo)們可(ke)以(yi)(yi)(yi)稱(cheng)為回調(diao)方法,它可(ke)以(yi)(yi)(yi)通過(guo)委(wei)托來(lai)實現,而對于如今的(de)業務,我(wo)們也可(ke)以(yi)(yi)(yi)通過(guo)這(zhe)種方式來(lai)實現,看一(yi)下DEMO

這是(shi)我們(men)的(de)data層方法(fa)簽名:

public void GeneratorOrder(List<Order_Info> list, Action<IUnitOfWork, int, int> authorizeClassroom)

我(wo)們看到,它(ta)的(de)參數(shu)里有個(ge)(ge)Action委托(tuo),它(ta)有三個(ge)(ge)參數(shu),這個(ge)(ge)方(fang)法是(shi)通過BLL層(ceng)(ceng)傳遞進來的(de),當data層(ceng)(ceng)的(de)工(gong)作完(wan)成后,可以(yi)回調這個(ge)(ge)BLL的(de)方(fang)法,我(wo)們看一下(xia)BLL層(ceng)(ceng)這個(ge)(ge)方(fang)法的(de)簽名:

  void AuthorizeClassroom(IUnitOfWork db, int userID, int classroomID)

看一下,BLL層(ceng)去調用(yong)data層(ceng)方法,將把(ba)委托實例(li)以參數的形式(shi)傳入data層(ceng)

orderInfoRepository.GeneratorOrder(list, AuthorizeClassroom);

最(zui)后(hou),使(shi)用(yong)我(wo)們的事(shi)務,把它們組合到(dao)一起(BLL層(ceng)與(yu)Data層(ceng)使(shi)用(yong)同一個事(shi)務,注(zhu)意(yi),它不是分布(bu)式事(shi)務,前提是它們的數據上(shang)下文是一個)

   TransactionScopeNoMsdtc.UsingNoMsdtc(Db, true, () =>
          {
             ...
          }

最后(hou),通過SQL監視工作看(kan)到(dao)的結果就是它們(men)處在同一事務塊里,呵(he)(he)呵(he)(he).

回到目錄

posted @ 2013-12-05 10:40  張占嶺  閱讀(1504)  評論(1)    收藏  舉報