Kela's Blog

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

          kela的筆記 ORM產品 ---- hibernate(2)

          Posted on 2005-11-15 15:19 Kela 閱讀(314) 評論(0)  編輯  收藏 所屬分類: 我的筆記(Hibernate)

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

                         /*
                          * 購物結算
                          */
                          public BigDecimal balance(String userID) {
                                conn = ......
                                try {
                                      //獲取當前等級, select
                                      ......
                               } catch () { }
                               try {
                                    //獲得打折比率, select
                                    //計算實際支付金額
                                    ......
                              } catch () { }

                             try {
                                  //將支付的金額累計到累積消費中, update
                                  //修改客戶現有的余額
                                  ......
                            } catch () {}


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

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

                         //獲取當前等級
                         gradeStr = a.getUserGarde(userID);

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

                         //累計客戶消費金額
                         a.updateCustMoney(userID, agioLong);

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

                      }
                   }

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

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

          分享到:
          主站蜘蛛池模板: 陵川县| 轮台县| 榆社县| 扬中市| 东港市| 赤峰市| 抚顺市| 泾阳县| 扎兰屯市| 郴州市| 疏附县| 新巴尔虎左旗| 工布江达县| 南通市| 交城县| 襄垣县| 疏附县| 岳池县| 界首市| 秀山| 盐源县| 利辛县| 昌平区| 长沙县| 禹州市| 瓦房店市| 河北省| 宜城市| 阿勒泰市| 兖州市| 明溪县| 双牌县| 囊谦县| 涡阳县| 溆浦县| 武鸣县| 东兰县| 安康市| 吴堡县| 花莲市| 台东市|