日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開(kāi)發(fā)C#.NET → 三種模式實(shí)現(xiàn)分層結(jié)構(gòu)下transaction數(shù)據(jù)訪問(wèn)層與業(yè)務(wù)邏輯分離

      三種模式實(shí)現(xiàn)分層結(jié)構(gòu)下transaction數(shù)據(jù)訪問(wèn)層與業(yè)務(wù)邏輯分離

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2011/5/8 16:58:06字體大。A-A+

      作者:西西點(diǎn)擊:179次評(píng)論:0次標(biāo)簽: 分層結(jié)構(gòu)

      • 類型:游戲存檔大。13.3M語(yǔ)言:中文 評(píng)分:8.1
      • 標(biāo)簽:
      立即下載
      三層結(jié)構(gòu)下,數(shù)據(jù)訪問(wèn)層與業(yè)務(wù)邏輯分離。從對(duì)象關(guān)系角度看,業(yè)務(wù)邏輯層的對(duì)象依賴于數(shù)據(jù)訪問(wèn)層。.net平臺(tái)提供了ado.net對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,connection對(duì)象提供了對(duì)database連接與transaction的功能。在分層結(jié)構(gòu)下,數(shù)據(jù)訪問(wèn)層處理了對(duì)數(shù)據(jù)庫(kù)的操作,實(shí)現(xiàn)了domain每一個(gè)對(duì)象與database的方法。例如對(duì)象Customer,提供CustomerDAO.Add(),CustomerDAO.Update()等等的方法,每一個(gè)方法都會(huì)引用獨(dú)立的connection對(duì)象。業(yè)務(wù)層直接調(diào)用CustomerDAO的方法。connection對(duì)象對(duì)業(yè)務(wù)層是close狀態(tài),業(yè)務(wù)層不能訪問(wèn)到并且控制ado.net提供的transaction。在不破壞分層體系結(jié)構(gòu)前提下一般有三種方式來(lái)實(shí)現(xiàn)。

      System.Transaction:

      .net提供的一個(gè)使用很簡(jiǎn)單的解決方法。System.Transaction允許對(duì)local和distributed數(shù)據(jù)庫(kù)進(jìn)行操作。使用System.Tansaction不用考慮是一個(gè)或者多個(gè)connection,一個(gè)或多個(gè)數(shù)據(jù)庫(kù)。例如可以使用TransactionScope,舉個(gè)例子,下面的code很直觀,

      using (TransactionScope scope = new TransactionScope())
      {
      SqlConnection connection1 = new SqlConnection(connectString1)
      SqlConnection connection2 = new SqlConnection(connectString2)
      scope.Complete();
      }

      有兩個(gè)connection,System.Transaction會(huì)整合成一個(gè)tranaction來(lái)處理,那么我們只需要在業(yè)務(wù)層需要transaction的地方使用TransactionScope就可以了,很方便。雖然方便,但還是有不利的地方。因?yàn)镾ystem.Transaction會(huì)自動(dòng)監(jiān)測(cè)connection,如果只有一個(gè),就直接使用ado.net的transaction,perfomance不會(huì)影響。但如果是上面的code,有兩個(gè)以上的connection,System.Transaction會(huì)自動(dòng)升級(jí)為distributed級(jí)別,這樣performance會(huì)打了折扣。而且對(duì)于除sqlserver一些其他的數(shù)據(jù)庫(kù)例如oracle,一直會(huì)是distributed級(jí)別。

      這種方式只適合對(duì)于performance要求不是很高的項(xiàng)目。

      Connection/Transaction參數(shù)傳遞給DAO:
      這種方式的思路是DAO的對(duì)象每一個(gè)對(duì)象需要提供一個(gè)參數(shù)來(lái)接受是否需要transaction的信息。例如可以自定義一個(gè)MyTrans類,MyTrans類引用一個(gè)connection對(duì)象。

      public class MyTrans

      {

      public IConnection connection;

      public void beginTrans();

      public void commitTrans();

      }

      這樣一個(gè)包裝過(guò)的類,就可以使業(yè)務(wù)層的對(duì)象對(duì)connection間接的進(jìn)行操作,例如業(yè)務(wù)層類customer.Update()就可以這樣實(shí)現(xiàn)。

      using(MyTrans tran=new MyTrans)

      {

      tran.beginTrans();

      CustomerDAO dao=new CustomerDAO(tran);

      dao.Add();

      tran.commitTrans();

      }

      這樣實(shí)現(xiàn),對(duì)開(kāi)發(fā)的復(fù)雜度會(huì)增大,DAO需要每個(gè)類都要實(shí)現(xiàn)一個(gè)接受Trans的參數(shù)。這種方式適和那種有充足時(shí)間而且想親自操作數(shù)據(jù)庫(kù)的項(xiàng)目。

      AOP實(shí)現(xiàn)Transaction:
      這種方式可以參考Spring提供的AOP機(jī)制與Spring的Transation,Aop的內(nèi)部實(shí)現(xiàn)是采用了反射原理,利用Typebuilder對(duì)Class的Methord進(jìn)行重新編排,使在邏輯層的對(duì)象方法內(nèi)部自動(dòng)的加入Connection的transaction的操作。Spring提供了一個(gè)聲明的方式,很方便快捷,而且由于使用的Ado.net進(jìn)行操作,所以performance沒(méi)有受到任何影響。如以下Code,只要簡(jiǎn)單的聲明就可以了。

      public class TestObjectManager : ITestObjectManager
      {

      // Fields/Properties ommited

      [Transaction()]
      public void SaveTwoTestObjects(TestObject to1, TestObject to2)
      {
      TestObjectDao.Create(to1.Name, to1.Age);
      TestObjectDao.Create(to2.Name, to1.Age);
      }

      [Transaction()]
      public void DeleteTwoTestObjects(string name1, string name2)
      {
      TestObjectDao.Delete(name1);
      TestObjectDao.Delete(name2);
      }
      }

      這種方式適合項(xiàng)目較大,需要快速開(kāi)發(fā),而且項(xiàng)目決策者愿意使用工具的項(xiàng)目。

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門(mén)評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)