PO/POJO/BO/DTO/VO/DAO的區別



PO :persistent object持久對象

1 .有時也被稱爲Data對象,對應數據庫中的entity,可以簡單認爲一個PO對應數據庫中的一條記錄。

2 .在hibernate持久化框架中與insert/delet操作密切相關。

3 .PO中不應該包含任何對數據庫的操作。

 

---------------------------------------------------------

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

 

PO 和VO都應該屬於它。

 

----------------------------------------------------------

BO :business object 業務對象

封裝業務邏輯爲一個對象(可以包括多個PO,通常需要將BO轉化成PO,才能進行數據的持久化,反之,從DB中得到的PO,需要轉化成BO才能在業務層使用)。

關於BO主要有三種概念

1 、只包含業務對象的屬性;

2 、只包含業務方法;

3 、兩者都包含。

在實際使用中,認爲哪一種概念正確並不重要,關鍵是實際應用中適合自己項目的需要。

 

----------------------------------------------------------

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。

 

----------------------------------------------------------

DAO :data access object數據訪問對象

1 .主要用來封裝對DB的訪問(CRUD操作)。

2 .通過接收Business層的數據,把POJO持久化爲PO。


總而言之,這些縮寫都是在不同的場景下,根據需要對全部數據或一部分數據進行拆分、組合再封裝後的結果。


發佈了11 篇原創文章 · 獲贊 23 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章