PO:persistent object 持久對象java
1 .有時也被稱爲Data對象,對應數據庫中的entity,能夠簡單認爲一個PO對應數據庫中的一條記錄。web
2 .在hibernate持久化框架中與insert/delet操做密切相關。數據庫
3 .PO中不該該包含任何對數據庫的操做。框架
POJO :plain ordinary java object 無規則簡單java對象hibernate
一箇中間對象,能夠轉化爲PO、DTO、VO。調試
1 .POJO持久化以後==〉POserver
(在運行期,由Hibernate中的cglib動態把POJO轉換爲PO,PO相對於POJO會增長一些用來管理數據庫entity狀態的屬性和方法。PO對於programmer來講徹底透明,因爲是運行期生成PO,因此能夠支持增量編譯,增量調試。)對象
2 .POJO傳輸過程當中==〉DTOblog
3 .POJO用做表示層==〉VO進程
PO 和VO都應該屬於它。
BO:business object 業務對象
業務對象主要做用是把業務邏輯封裝爲一個對象。這個對象能夠包括一個或多個其它的對象。
好比一個簡歷,有教育經歷、工做經歷、社會關係等等。咱們能夠把教育經歷對應一個PO,工做經歷對應一個PO,社會關係對應一個PO。
創建一個對應簡歷的BO對象處理簡歷,每一個BO包含這些PO。
這樣處理業務邏輯時,咱們就能夠針對BO去處理。
封裝業務邏輯爲一個對象(能夠包括多個PO,一般須要將BO轉化成PO,才能進行數據的持久化,反之,從DB中獲得的PO,須要轉化成BO才能在業務層使用)。
關於BO主要有三種概念
1 、只包含業務對象的屬性;
2 、只包含業務方法;
3 、二者都包含。
在實際使用中,認爲哪種概念正確並不重要,關鍵是實際應用中適合本身項目的須要。
VO:value object 值對象 / view object 表現層對象
1 .主要對應頁面顯示(web頁面/swt、swing界面)的數據對象。
2 .能夠和表對應,也能夠不,這根據業務的須要。
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。
簡易的關係圖: