PO/VO/DTO/POJO 以及 JavaBean 介紹

不管是在實際開發過程當中,仍是閱讀各類技術書籍,PO/VO/DTO/POJO 以及 JavaBean 都是相對的高頻詞彙,所以有必要對它們各自的含義以及相互間的區別有一個清晰的認識和理解。
 
PO /ENTITY:persistent object 持久對象
1 .有時也被稱爲 Data 對象,對應數據庫中的 entity,能夠簡單認爲一個 PO 對應數據庫中的一條記錄。
2 .在 hibernate 持久化框架中與 insert/delet 操做密切相關。
3 .PO 中不該該包含任何對數據庫的操做。
 
VO :value object 值對象 / view object 表現層對象
1 .主要對應頁面顯示(web 頁面 /swt、swing 界面)的數據對象。
2 .能夠和表對應,也能夠不,這根據業務的須要。
注 :在 struts 中,用 ActionForm 作 VO,須要作一個轉換,由於 PO 是面向對象的,而 ActionForm 是和 view 對應的,要將幾個 PO 要顯示的屬性合成一個 ActionForm,可使用 BeanUtils 的 copy 方法。
DTO (TO) :Data Transfer Object 數據傳輸對象
1 .用在須要跨進程或遠程傳輸時,它不該該包含業務邏輯。
2 .好比一張表有 100 個字段,那麼對應的 PO 就有 100 個屬性(大多數狀況下,DTO 內的數據來自多個表)。但 view 層只需顯示 10 個字段,沒有必要把整個 PO 對象傳遞到 client,這時咱們就能夠用只有這 10 個屬性的 DTO 來傳輸數據到 client,這樣也不會暴露 server 端表結構。到達客戶端之後,若是用這個對象來對應界面顯示,那此時它的身份就轉爲 VO。
 
POJO :plain ordinary java object 用這個名字用來強調它是一個普通 java 對象,而不是一個特殊的對象
一箇中間對象,能夠轉化爲 PO、DTO、VO。
1 .POJO 持久化以後 ==〉PO
(在運行期,由 Hibernate 中的 cglib 動態把 POJO 轉換爲 PO,PO 相對於 POJO 會增長一些用來管理數據庫 entity 狀態的屬性和方法。PO 對於 programmer 來講徹底透明,因爲是運行期生成 PO,因此能夠支持增量編譯,增量調試。)
2 .POJO 傳輸過程當中 ==〉DTO
3 .POJO 用做表示層 ==〉VO
DTO 和 VO 都應該屬於它, 在實際開發中,可能只有 PO(Entity) 和 VO, 在須要 DTO 的時候 VO 充當了 DTO 的角色,若是 VO 的字段 A 在數據庫中不存在 (即不須要從數據庫中取值),則查詢的時候能夠隨便賦一個值給字段 A。
 
JavaBean 是一種 JAVA 語言寫成的可重用組件。它的方法命名,構造及行爲必須符合特定的約定:
一、這個類必須有一個公共的缺省構造函數。
二、這個類的屬性使用 getter 和 setter 來訪問,其餘方法聽從標準命名規範。
三、這個類應是可序列化的。 
由於這些要求主要是靠約定而不是靠實現接口,因此許多開發者把 JavaBean 看做聽從特定命名約定的 POJO。
 簡而言之,當一個 Pojo 可序列化,有一個無參的構造函數,使用 getter 和 setter 方法來訪問屬性時,他就是一個 JavaBean
相關文章
相關標籤/搜索