lsyzl

          在java的世界里,不斷前行。

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            2 Posts :: 1 Stories :: 0 Comments :: 0 Trackbacks
          關于VO與PO,在許多論壇里是有不少論述的,以下是自己結合自身項目以及其他同仁的經驗整理的一些
          材料,只是泛泛而談,相信在以后,對于這方面的問題,自己還是會有其他想法的。
          O/R Mapping 是 Object Relational Mapping的縮寫。通俗點講,就是將對象與關系數據庫綁定,用對象來表示關系數據。在O/R Mapping的領域里,有兩個基本的東西需要了解,即VO,PO。
          VO,值對象(Value Object),PO,持久對象(Persisent Object),它們是由一組屬性和屬性的get和set方法組成。從結構上看,它們并沒有什么不同的地方。但從其意義和本質上來看是完全不同的。
            
            1.VO是用new關鍵字創建,由GarbageCollection機制回收的。
            
                    PO則是向數據庫中添加新數據時創建,刪除數據庫中數據時消除的。并且它只能存活在一個數據庫連接中,斷開連接即被銷毀。
            
            2.VO是值對象,精確點講它是業務對象,是存活在業務層的,是業務邏輯使用的,它存活的目的就是為數據提供一個生存的地方。
            
                    PO則是有狀態的,每個屬性代表其當前的狀態(也就是說,它們也是可以改變的)。它是物理數據的對象表示。使用它,可以使我們的程序與物理數據解耦,并且可以簡化對象數據與物理數據之間的轉換。
            
            3.VO的屬性是根據當前業務的不同而不同的,也就是說,它的每一個屬性都一一對應當前業務邏輯所需要的數據的名稱。
            
                    PO的屬性是跟數據庫表的字段一一對應的,PO的變化在事務提交時將反應到實際數據庫中。
          在J2EE架構中各層的數據表示方法:

          Web層的數據表示是FormBean,數據來源于HTML或JSP頁面 Form POST /GET
          業務層的數據表示是VO
          持久層的數據表示是PO,其數據來源于數據庫,持久層的數據表示例如CMP

          在一個規范的J2EE架構中,不同層的數據表示應該被限制在層內,而不應該擴散到其它層,這樣可以降低層間的耦合性,提高J2EE架構整體的可維護性和可擴展性。比如說Web層的邏輯進行了修改,那么只需要修改FormBean的結構,而不需要觸動業務層和持久層的代碼修改。同樣滴,當數據庫表進行了小的調整,那么也只需要修改持久層數據表示,而不需要觸動業務層代碼和Web層代碼。

           
          posted on 2005-10-21 16:02 java行者 閱讀(169) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 车险| 石柱| 安徽省| 凤城市| 沭阳县| 涿鹿县| 大姚县| 南召县| 葵青区| 顺义区| 高淳县| 泰安市| 汨罗市| 宾阳县| 平利县| 敦煌市| 法库县| 禹城市| 泗水县| 江陵县| 安陆市| 文成县| 环江| 墨竹工卡县| 广宁县| 莱州市| 富裕县| 措勤县| 遂川县| 印江| 福清市| 石楼县| 石阡县| 迁西县| 卫辉市| 华坪县| 顺昌县| 特克斯县| 马鞍山市| 梓潼县| 镇雄县|