PO,BO,VO,DTO和POJO的區(qū)別

PO:persistent object 持久對象

1 .有時也被稱為Data對象,對應(yīng)數(shù)據(jù)庫中的entity,可以簡單認(rèn)為一個PO對應(yīng)數(shù)據(jù)庫中的一條記錄。

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

3 .PO中不應(yīng)該包含任何對數(shù)據(jù)庫的操作。


POJO :plain ordinary java object 無規(guī)則簡單java對象

一個中間對象,可以轉(zhuǎn)化為PO、DTO、VO。

1 .POJO持久化之后==〉PO

(在運行期,由Hibernate中的cglib動態(tài)把POJO轉(zhuǎn)換為PO,PO相對于POJO會增加一些用來管理數(shù)據(jù)庫entity狀態(tài)的屬性和方法。PO對于programmer來說完全透明,由于是運行期生成PO,所以可以支持增量編譯,增量調(diào)試。)

2 .POJO傳輸過程中==〉DTO

3 .POJO用作表示層==〉VO

PO 和VO都應(yīng)該屬于它。


BO:business object 業(yè)務(wù)對象

業(yè)務(wù)對象主要作用是把業(yè)務(wù)邏輯封裝為一個對象。這個對象可以包括一個或多個其它的對象。

比如一個簡歷,有教育經(jīng)歷、工作經(jīng)歷、社會關(guān)系等等。我們可以把教育經(jīng)歷對應(yīng)一個PO,工作經(jīng)歷對應(yīng)一個PO,社會關(guān)系對應(yīng)一個PO。

建立一個對應(yīng)簡歷的BO對象處理簡歷,每個BO包含這些PO。

這樣處理業(yè)務(wù)邏輯時,我們就可以針對BO去處理。

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

關(guān)于BO主要有三種概念

1 、只包含業(yè)務(wù)對象的屬性;

2 、只包含業(yè)務(wù)方法;

3 、兩者都包含。

在實際使用中,認(rèn)為哪一種概念正確并不重要,關(guān)鍵是實際應(yīng)用中適合自己項目的需要。


VO:value object 值對象 / view object 表現(xiàn)層對象

1 .主要對應(yīng)頁面顯示(web頁面/swt、swing界面)的數(shù)據(jù)對象。

2 .可以和表對應(yīng),也可以不,這根據(jù)業(yè)務(wù)的需要。


DTO(TO):Data Transfer Object 數(shù)據(jù)傳輸對象

1 .用在需要跨進程或遠程傳輸時,它不應(yīng)該包含業(yè)務(wù)邏輯。

2 .比如一張表有100個字段,那么對應(yīng)的PO就有100個屬性(大多數(shù)情況下,DTO內(nèi)的數(shù)據(jù)來自多個表)。但view層只需顯示10個字段,沒有必要把整個PO對象傳遞到client,這時我們就可以用只有這10個屬性的DTO來傳輸數(shù)據(jù)到client,這樣也不會暴露server端表結(jié)構(gòu)。到達客戶端以后,如果用這個對象來對應(yīng)界面顯示,那此時它的身份就轉(zhuǎn)為VO。


DAO:data access object數(shù)據(jù)訪問對象

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

2 .通過接收Business層的數(shù)據(jù),把POJO持久化為PO。

簡易的關(guān)系圖:

這里寫圖片描述

原文鏈接:www.baidu.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容