<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Kela's Blog

                前面的路很坎坷,但畢竟是條路.也許走過這一段就會(huì)發(fā)現(xiàn),走過去就是夢(mèng)想中的地方.因此堅(jiān)持成為此刻唯一能做且必須去做的事情.
    posts - 9, comments - 27, trackbacks - 0, articles - 15

            Hibernate有那么多的優(yōu)點(diǎn),那么這些優(yōu)點(diǎn)在我們的應(yīng)用開發(fā)中是如何體現(xiàn)呢,確切的說(shuō)我們不是因?yàn)樗餍卸盟且驗(yàn)樗芙o我們的開發(fā)帶來(lái)幫助,能提高系統(tǒng)的性能。
            Hibernate是持久層的框架,那就的先從持久層說(shuō)起。看看我們通常的持久層是如何做的。
            1. 關(guān)于持久層的介紹:
            MVC作為主流的系統(tǒng)架構(gòu)模式,已被越來(lái)越多的開發(fā)者所使用。MVC中的M,也就是Model則包含著大量的業(yè)務(wù)邏輯和數(shù)據(jù)邏輯,持久層作為Model中的重要組成,其設(shè)計(jì)的優(yōu)劣將對(duì)系統(tǒng)的整體表現(xiàn)產(chǎn)生至關(guān)重要的影響。
           “持久層”,也就是在系統(tǒng)邏輯層面上,專注于實(shí)現(xiàn)數(shù)據(jù)持久化(對(duì)內(nèi)存的數(shù)據(jù)進(jìn)行固化,通常指保存至住據(jù)庫(kù))的一個(gè)相對(duì)獨(dú)立的領(lǐng)域。也就意味著,我們的系統(tǒng)架構(gòu)中,因該有一個(gè)相對(duì)獨(dú)立的邏輯層面,專注于數(shù)據(jù)持久化邏輯的實(shí)現(xiàn),與系統(tǒng)其他部門相對(duì)而言,這個(gè)層面應(yīng)該擁有一個(gè)較為清晰和嚴(yán)格的邏輯邊界。
            2. 持久層的設(shè)計(jì)
            場(chǎng)景:(在“深入淺出Hibernate”中一個(gè)非常好的例子),用戶進(jìn)入網(wǎng)上商店進(jìn)行購(gòu)物結(jié)算,那么他有以下的業(yè)務(wù)處理邏輯。
                1)根據(jù)客戶ID取出客戶當(dāng)前等級(jí)(如,普通會(huì)員,VIP)
                2)根據(jù)客戶等級(jí)獲得打折比率。
                3)根據(jù)總金額 × 打著比率計(jì)算到實(shí)際支付的金額。
                4)將本次實(shí)際的支付的金額累積到客戶累計(jì)消費(fèi)金額的字段中。
                5)返回實(shí)際金額。
            A方法,有的朋友可能這樣處理:
              public calss NetShop {
                   ......

                   /*
                    * 購(gòu)物結(jié)算
                    */
                    public BigDecimal balance(String userID) {
                          conn = ......
                          try {
                                //獲取當(dāng)前等級(jí), select
                                ......
                         } catch () { }
                         try {
                              //獲得打折比率, select
                              //計(jì)算實(shí)際支付金額
                              ......
                        } catch () { }

                       try {
                            //將支付的金額累計(jì)到累積消費(fèi)中, update
                            //修改客戶現(xiàn)有的余額
                            ......
                      } catch () {}


                      //返回實(shí)際的消費(fèi)金額
                      return new BigDecimal(****);
                 }
             }
             B. 那另外的一些朋友他們會(huì)說(shuō),在A里面混雜的業(yè)務(wù)邏輯和數(shù)據(jù)訪問代碼極大的干擾了閱讀程序的人,而且這樣的代碼將給日后的維護(hù)帶來(lái)極大的困難(我也是這樣認(rèn)為哦 ~ ~)。如果我們的實(shí)際應(yīng)用當(dāng)中的業(yè)務(wù)邏輯變得非常龐大和復(fù)雜的時(shí)候,A的做法顯然有憂缺點(diǎn)的。于是,就有了下面的改造:
             public calss NetShop {
                  ......

                  /*
                   * 購(gòu)物結(jié)算
                   */
                 public BigDecimal balance(String userID) {
                    A a = new A();
                    String gradeStr = null;  //客戶級(jí)別
                    long agioLong = 0.0;

                   //獲取當(dāng)前等級(jí)
                   gradeStr = a.getUserGarde(userID);

                   //根據(jù)等級(jí)計(jì)算打折比率
                   agioLong = a.getAgio(gradeStr);

                   //累計(jì)客戶消費(fèi)金額
                   a.updateCustMoney(userID, agioLong);

                   //修改客戶余額
                   a.updateUserBalance(userID, agioLong);
            
                  //返回消費(fèi)金額
                  return new BigDecimal(****);

                }
             }

              public class A {
                   //去實(shí)現(xiàn)上面對(duì)方法
              }
              可以說(shuō)B的實(shí)現(xiàn)方式,是我(呵呵,大多數(shù)可不敢亂說(shuō))經(jīng)常使用的方式,在實(shí)際的應(yīng)用當(dāng)中結(jié)合一些數(shù)據(jù)庫(kù)性能上的優(yōu)化(連接池,預(yù)編譯語(yǔ)句之類的),基本上已經(jīng)實(shí)現(xiàn)了,業(yè)務(wù)和數(shù)據(jù)層的分離。
              然而,在現(xiàn)在客戶的應(yīng)用需求和公司考慮可重用等因素的影響下,我們有不得不去考慮,我們的應(yīng)用能不能實(shí)現(xiàn)嚴(yán)格意義上的跨數(shù)據(jù)庫(kù)使用,或者說(shuō),我們的應(yīng)用從一個(gè)數(shù)據(jù)遷移到另外一個(gè)數(shù)據(jù)的時(shí)候,是不是只做很少的改動(dòng)(因?yàn)椋F(xiàn)在有很多的項(xiàng)目需要引入第三方的產(chǎn)品,它山之石可以攻玉嘛)。帶著這樣的疑問,那我們是不是會(huì)寫很多的基于特定數(shù)據(jù)庫(kù)的數(shù)據(jù)層處理代碼(當(dāng)然了,這也是個(gè)好辦法)。現(xiàn)在我們就要引入Hibernate了,我覺得選擇一個(gè)比我們自己的實(shí)現(xiàn)方式更好的實(shí)現(xiàn)方式,是一個(gè)更加聰明的決策。那么Hibernate能干什么?
               1)減少乏味的代碼
                    無(wú)論是A方法還是B方法我們都少不了大量的數(shù)據(jù)庫(kù)連接,查詢,關(guān)閉等代碼,寫得多了也就覺得煩了,Hibernate封裝了數(shù)據(jù)庫(kù)持久層大多數(shù)技術(shù)細(xì)節(jié),如事物管理,連接管理,sql執(zhí)行等。
                    至少這點(diǎn),我們是需要的。
               2)更加面向?qū)ο蟮脑O(shè)計(jì)
                     就是說(shuō)像設(shè)計(jì)對(duì)象一樣的去設(shè)計(jì)和操作數(shù)據(jù)庫(kù)。這條可能現(xiàn)在還不能理解。
               3)更好的性能
                      我覺得這條好理解多了,系出名門和專家之手的框架,肯定提供了非常優(yōu)秀的性能優(yōu)化機(jī)制。比如,對(duì)連接池,PreparedSatatement 緩存,數(shù)據(jù)緩存等。這點(diǎn)我們可以大可放心,因?yàn)槭褂谜邲Q定了它的優(yōu)秀。
                4)更好的移植性
                       我們只需要簡(jiǎn)單得修改其的配置參數(shù),即可實(shí)現(xiàn)底層數(shù)據(jù)庫(kù)的良好切換(這也是有前提的哦,可不能使用特定數(shù)據(jù)庫(kù)都有的特性)。這條的好處是顯而易見的。

                關(guān)于引入Hibernate有什么好處,我覺得以上就足夠了,它確實(shí)能幫助我們。

    分享到:
    主站蜘蛛池模板: 欧美最猛性xxxxx免费| 亚洲高清视频免费| 哒哒哒免费视频观看在线www| 亚洲av午夜精品无码专区| 18禁止看的免费污网站| 亚洲黄色在线网站| 91福利视频免费| 亚洲中文字幕在线无码一区二区| 16女性下面扒开无遮挡免费| www.亚洲成在线| 最好免费观看韩国+日本| 国产成人人综合亚洲欧美丁香花| 国产成人3p视频免费观看| 一区二区视频免费观看| 国产亚洲A∨片在线观看| 久久久久免费看黄a级试看| 亚洲精品福利网站| 日韩激情无码免费毛片| 国产高清视频免费在线观看| 亚洲妇熟XXXX妇色黄| 最新黄色免费网站| 亚洲hairy多毛pics大全| 亚洲成人高清在线| 国产精品免费福利久久| 亚洲久悠悠色悠在线播放| 免费一级毛片一级毛片aa| 成人网站免费看黄A站视频| 亚洲理论片在线中文字幕| 女人张开腿等男人桶免费视频| 暖暖免费中文在线日本| 亚洲国产精品一区二区久久| 无码人妻久久一区二区三区免费丨| 国产精品亚洲二区在线| 久久亚洲国产中v天仙www| 成年女性特黄午夜视频免费看| 直接进入免费看黄的网站| 久久亚洲精品成人777大小说| 在线观看视频免费国语| 中国黄色免费网站| 亚洲一久久久久久久久| 亚洲色爱图小说专区|