VO
,
PO
,
BO
,
QO,
DAO ,POJO,
?
O/R Mapping
是
Object Relational
Mapping
(對象關(guān)系映射)的縮寫。通俗點(diǎ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
是值對象,精確點(diǎn)講它是業(yè)務(wù)對象,是存活在業(yè)務(wù)層的,是業(yè)務(wù)邏輯使用的,它存活的目的就是為數(shù)據(jù)提供一個生存的地方。
PO
則是有狀態(tài)的,每個屬性代表其當(dāng)前的狀態(tài)。它是物理數(shù)據(jù)的對象表示。使用它,可以使我們的程序與物理數(shù)據(jù)解耦,并且可以簡化對象數(shù)據(jù)與物理數(shù)據(jù)之間的轉(zhuǎn)換。
3.
VO
的屬性是根據(jù)當(dāng)前業(yè)務(wù)的不同而不同的,也就是說,它的每一個屬性都一一對應(yīng)當(dāng)前業(yè)務(wù)邏輯所需要的數(shù)據(jù)的名稱。
PO
的屬性是跟數(shù)據(jù)庫表的字段一一對應(yīng)的。
PO
對象需要實(shí)現(xiàn)序列化接口。
-------------------------------------------------
java
的
(PO,VO,TO,BO,DAO,POJO)
解釋
PO(persistant object)
持久對象
在
o/r
映射的時候出現(xiàn)的概念,如果沒有
o/r
映射,沒有這個概念存在了。通常對應(yīng)數(shù)據(jù)模型
(
數(shù)據(jù)庫
),
本身還有部分業(yè)務(wù)邏輯的處理。可以看成是與數(shù)據(jù)庫中的表相映射的
java
對象。最簡單的
PO
就是對應(yīng)數(shù)據(jù)庫中某個表中的一條記錄,多個記錄可以用
PO
的集合。
PO
中應(yīng)該不包含任何對數(shù)據(jù)庫的操作。
VO(value object)
值對象
通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,和
PO
一樣也是僅僅包含數(shù)據(jù)而已。但應(yīng)是抽象出的業(yè)務(wù)對象
,
可以和表對應(yīng)
,
也可以不
,
這根據(jù)業(yè)務(wù)的需要
.
個人覺得同
DTO(
數(shù)據(jù)傳輸對象
),
在
web
上傳遞。
TO(Transfer Object)
,數(shù)據(jù)傳輸對象
在應(yīng)用程序不同
tie(
關(guān)系
)
之間傳輸?shù)膶ο?/span>
BO(business object)
業(yè)務(wù)對象
從業(yè)務(wù)模型的角度看
,
見
UML
元件領(lǐng)域模型中的領(lǐng)域?qū)ο蟆7庋b業(yè)務(wù)邏輯的
java
對象
,
通過調(diào)用
DAO
方法
,
結(jié)合
PO,VO
進(jìn)行業(yè)務(wù)操作。
business object:
業(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
去處理。
QO
:查詢對象
POJO(plain ordinary java object)
簡單無規(guī)則
java
對象
純的傳統(tǒng)意義的
java
對象。就是說在一些
Object/Relation
Mapping
工具中,能夠做到維護(hù)數(shù)據(jù)庫表記錄的
persisent
object
完全是一個符合
Java Bean
規(guī)范的純
Java
對象,沒有增加別的屬性和方法。我的理解就是最基本的
Java Bean
,只有屬性字段及
setter
和
getter
方法!。
DAO(data access object)
數(shù)據(jù)訪問對象
是一個
sun
的一個標(biāo)準(zhǔn)
j2ee
設(shè)計(jì)模式,
這個模式中有個接口就是
DAO
,它負(fù)持久層的操作。為業(yè)務(wù)層提供接口。此對象用于訪問數(shù)據(jù)庫。通常和
PO
結(jié)合使用,
DAO
中包含了各種數(shù)據(jù)庫的操作方法。通過它的方法
,
結(jié)合
PO
對數(shù)據(jù)庫進(jìn)行相關(guān)的操作。夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間。配合
VO,
提供數(shù)據(jù)庫的
CRUD
操作
...
?
?
DTO
:
Data Transfer Object
數(shù)據(jù)傳輸對象
主要用于遠(yuǎn)程調(diào)用等需要大量傳輸對象的地方。
比如我們一張表有
100
個字段,那么對應(yīng)的
PO
就有
100
個屬性。
但是我們界面上只要顯示
10
個字段,
客戶端用
WEB service
來獲取數(shù)據(jù),沒有必要把整個
PO
對象傳遞到客戶端,
這時我們就可以用只有這
10
個屬性的
DTO
來傳遞結(jié)果到客戶端,這樣也不會暴露服務(wù)端表結(jié)構(gòu)
.
到達(dá)客戶端以后,如果用這個對象來對應(yīng)界面顯示,那此時它的身份就轉(zhuǎn)為
VO
?
DAO
:數(shù)據(jù)訪問對象
——
同時還有
DAO
模式
DTO
:數(shù)據(jù)傳輸對象
——
同時還有
DTO
模式
?
?
O/R Mapper
對象
/
關(guān)系
映射
定義好所有的
mapping
之后,這個
O/R
Mapper
可以幫我們做很多的工作。通過這些
mappings,
這個
O/R
Mapper
可以生成所有的關(guān)于對象保存,刪除,讀取的
SQL
語句,我們不再需要寫那么多行的
DAL
代碼了。
實(shí)體
Model(
實(shí)體模式
)
DAL(
數(shù)據(jù)訪問層
)
IDAL(
接口層
)
DALFactory(
類工廠
)
BLL(
業(yè)務(wù)邏輯層
)
BOF???? Business Object Framework??????
業(yè)務(wù)對象框架
SOA???? Service Orient Architecture????
面向服務(wù)的設(shè)計(jì)
EMF???? Eclipse Model Framework???????
Eclipse
建模框架