Java中的幾種對象(PO、VO、DAO、BO、POJO)

一、PO :(persistant object),持久對象

PO:persistant object 持久對象,可以看成是與數(shù)據(jù)庫中的表相映射的java對象。最簡單的PO就是對應數(shù)據(jù)庫中某個表中的一條記錄,多個記錄可以用PO的集合。PO中應該不包含任何對數(shù)據(jù)庫的操作。使用Hibernate來生成PO是不錯的選擇。

二、VO:(value object) ,值對象

VO:value object值對象。通常用于業(yè)務層之間的數(shù)據(jù)傳遞,和PO一樣也是僅僅包含數(shù)據(jù)而已。但應是抽象出的業(yè)務對象,可以和表對應,也可以不,這根據(jù)業(yè)務的需要.個人覺得同DTO(數(shù)據(jù)傳輸對象),在web上傳遞。 PO只能用在數(shù)據(jù)層,VO用在商業(yè)邏輯層和表示層。各層操作屬于該層自己的數(shù)據(jù)對象,這樣就可以降低各層之間的耦合,便于以后系統(tǒng)的維護和擴展。

三、DAO:(Data Access Objects) ,數(shù)據(jù)訪問對象接口

DAO:data accessobject 數(shù)據(jù)訪問對象,此對象用于訪問數(shù)據(jù)庫。通常和PO結(jié)合使用,DAO中包含了各種數(shù)據(jù)庫的操作方法。通過它的方法,結(jié)合PO對數(shù)據(jù)庫進行相關(guān)的操作。夾在業(yè)務邏輯與數(shù)據(jù)庫資源中間。J2EE開發(fā)人員使用數(shù)據(jù)訪問對象(DAO)設(shè)計模式把底層的數(shù)據(jù)訪問邏輯和高層的商務邏輯分開.實現(xiàn)DAO模式能夠更加專注于編寫數(shù)據(jù)訪問代碼.DAO模式是標準的J2EE設(shè)計模式之一.開發(fā)人員使用這個模式把底層的數(shù)據(jù)訪問操作和上層的商務邏輯分開.
一個典型的DAO實現(xiàn)有下列幾個組件:

  1. 一個DAO工廠類;
  2. 一個DAO接口;
  3. 一個實現(xiàn)DAO接口的具體類;
  4. 數(shù)據(jù)傳遞對象(有些時候叫做值對象). 具體的DAO類包含了從特定的數(shù)據(jù)源訪問數(shù)據(jù)的邏輯。

四、BO:(Business Object),業(yè)務對象層

BO:business object 業(yè)務對象,封裝業(yè)務邏輯的java對象,通過調(diào)用DAO方法,結(jié)合PO,VO進行業(yè)務操作。 表示應用程序領(lǐng)域內(nèi)“事物”的所有實體類。這些實體類駐留在服務器上,并利用服務類來協(xié)助完成它們的職責。

五、POJO:(Plain Old Java Objects),簡單的Java對象

POJO:plain ordinaryjava object 簡單無規(guī)則java對象,我個人覺得它和其他不是一個層面上的東西,VO和PO應該都屬于它。實際就是普通JavaBeans,使用POJO名稱是為了避免和EJB混淆起來,而且簡稱比較直接.其中有一些屬性及其getter、setter方法的類,有時可以作為valueobject或dto(Data Transform Object)來使用.當然,如果你有一個簡單的運算屬性也是可以的,但不允許有業(yè)務方法,也不能攜帶有connection之類的方法。

注意:

O/R Mapping 是Object Relational Mapping(對象關(guān)系映射)的縮寫。通俗點講,就是將對象與關(guān)系數(shù)據(jù)庫綁定,用對象來表示關(guān)系數(shù)據(jù)。在O/R Mapping的世界里,有兩個基本的也是重要的東東需要了解,即VO,PO。   
VO,值對象(Value Object),PO,持久對象(Persisent Object),它們是由一組屬性和屬性的get和set方法組成。從結(jié)構(gòu)上看,它們并沒有什么不同的地方。但從其意義和本質(zhì)上來看是完全不同的。
1.VO是用new關(guān)鍵字創(chuàng)建,由GC回收的。   
PO則是向數(shù)據(jù)庫中添加新數(shù)據(jù)時創(chuàng)建,刪除數(shù)據(jù)庫中數(shù)據(jù)時削除的。并且它只能存活在一個數(shù)據(jù)庫連接中,斷開連接即被銷毀。
2.VO是值對象,精確點講它是業(yè)務對象,是存活在業(yè)務層的,是業(yè)務邏輯使用的,它存活的目的就是為數(shù)據(jù)提供一個生存的地方?! ?br> PO則是有狀態(tài)的,每個屬性代表其當前的狀態(tài)。它是物理數(shù)據(jù)的對象表示。使用它,可以使我們的程序與物理數(shù)據(jù)解耦,并且可以簡化對象數(shù)據(jù)與物理數(shù)據(jù)之間的轉(zhuǎn)換。
3.VO的屬性是根據(jù)當前業(yè)務的不同而不同的,也就是說,它的每一個屬性都一一對應當前業(yè)務邏輯所需要的數(shù)據(jù)的名稱。  
PO的屬性是跟數(shù)據(jù)庫表的字段一一對應的。PO對象需要實現(xiàn)序列化接口。

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

相關(guān)閱讀更多精彩內(nèi)容

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