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

無(wú)論是在實(shí)際開(kāi)發(fā)過(guò)程中,還是閱讀各種技術(shù)書(shū)籍,PO/VO/DTO/POJO以及JavaBean都是相對(duì)的高頻詞匯,因此有必要對(duì)它們各自的含義以及相互間的區(qū)別有一個(gè)清晰的認(rèn)識(shí)和理解。

PO /ENTITY:persistent object持久對(duì)象

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

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

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

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

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

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

注:在struts中,用ActionForm做VO,需要做一個(gè)轉(zhuǎn)換,因?yàn)镻O是面向?qū)ο蟮模鳤ctionForm是和view對(duì)應(yīng)的,要將幾個(gè)PO要顯示的屬性合成一個(gè)ActionForm,可以使用BeanUtils的copy方法。

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

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

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

POJO:plain ordinary java object用這個(gè)名字用來(lái)強(qiáng)調(diào)它是一個(gè)普通java對(duì)象,而不是一個(gè)特殊的對(duì)象

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

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

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

2.POJO傳輸過(guò)程中==〉DTO

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

DTO和VO都應(yīng)該屬于它,在實(shí)際開(kāi)發(fā)中,可能只有PO(Entity)和VO,在需要DTO的時(shí)候VO充當(dāng)了DTO的角色,如果VO的字段A在數(shù)據(jù)庫(kù)中不存在(即不需要從數(shù)據(jù)庫(kù)中取值),則查詢的時(shí)候可以隨便賦一個(gè)值給字段A。

JavaBean是一種JAVA語(yǔ)言寫(xiě)成的可重用組件。它的方法命名,構(gòu)造及行為必須符合特定的約定:

1、這個(gè)類(lèi)必須有一個(gè)公共的缺省構(gòu)造函數(shù)。

2、這個(gè)類(lèi)的屬性使用getter和setter來(lái)訪問(wèn),其他方法遵從標(biāo)準(zhǔn)命名規(guī)范。

3、這個(gè)類(lèi)應(yīng)是可序列化的。

因?yàn)檫@些要求主要是靠約定而不是靠實(shí)現(xiàn)接口,所以許多開(kāi)發(fā)者把JavaBean看作遵從特定命名約定的POJO。

簡(jiǎn)而言之,當(dāng)一個(gè)Pojo可序列化,有一個(gè)無(wú)參的構(gòu)造函數(shù),使用getter和setter方法來(lái)訪問(wèn)屬性時(shí),他就是一個(gè)JavaBean

DAO:data access object數(shù)據(jù)訪問(wèn)對(duì)象

1.主要用來(lái)封裝對(duì)DB的訪問(wèn)(CRUD操作)。

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


源地址:http://blog.sina.com.cn/s/blog_6d4f91050102vcfp.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容