在JAVA開發(fā)的過程中,常常遇到這樣的包名,如entity、bo、vo、po、dto、pojo等,許多初學者看到這樣的詞語都回感到迷惑,下面這一篇就把這些不同而又容易讓人產(chǎn)生迷惑的實體類做一個很好的區(qū)分。
先來一張圖:
Dao(data access object)
代表數(shù)據(jù)訪問對象的意思,是sun的一個標準j2ee設計模式的接口之一,負責持久層的操作 。這個基本都了解,Dao和上面幾個O區(qū)別最大,基本沒有互相轉(zhuǎn)化的可能性和必要,主要用來封裝對數(shù)據(jù)的訪問,注意,是對數(shù)據(jù)的訪問,不是對數(shù)據(jù)庫的訪問。
Pojo(plain ordinary java object)
代表簡單無規(guī)則java對象
純的傳統(tǒng)意義的java對象,最基本的Java Bean只有屬性加上屬性的get和set方法.
POJO讓開發(fā)者可專注于業(yè)務邏輯和脫離框架的單元測試。除此之外, 由于POJO并不需要繼承框架的類或?qū)崿F(xiàn)其接口,開發(fā)者能夠極其靈活地搭建繼承結(jié)構(gòu)和建造應用。
作用:POJO的意義就在于它的簡單而靈活性,因為它的簡單和靈活,使得POJO能夠任意擴展,從而勝任多個場合,也就讓一個模型貫穿多個層成為現(xiàn)實。
先寫一個核心POJO,然后實現(xiàn)業(yè)務邏輯接口和持久化接口,就成了Domain Model; UI需要使用時,就實現(xiàn)數(shù)據(jù)綁定接口,變成VO(View Object),需要進行傳輸?shù)臅r候就可以轉(zhuǎn)化為Dto對象。
Dto(data transfer object)
代表數(shù)據(jù)傳輸對象的意思
是一種設計模式之間傳輸數(shù)據(jù)的軟件應用系統(tǒng),數(shù)據(jù)傳輸目標往往是數(shù)據(jù)訪問對象從數(shù)據(jù)庫中檢索數(shù)據(jù).數(shù)據(jù)傳輸對象與數(shù)據(jù)交互對象或數(shù)據(jù)訪問對象之間的差異是一個以不具任何行為除了存儲和檢索的數(shù)據(jù)(訪問和存取器)
簡而言之,就是接口之間傳遞的數(shù)據(jù)封裝
表里面有十幾個字段:id,name,gender(M/F),age……
頁面需要展示三個字段:name,gender(男/女),age
所以Dto的作用:
一是能提高數(shù)據(jù)傳輸?shù)乃俣?減少了傳輸字段)
二能隱藏后端表結(jié)構(gòu)
Vo(value object)
代表值對象的意思,通常用于業(yè)務層之間的數(shù)據(jù)傳遞,由new創(chuàng)建,由GC回收。
主要體現(xiàn)在視圖的對象,對于一個WEB頁面將整個頁面的屬性封裝成一個對象,然后用一個VO對象在控制層與視圖層進行傳輸交換。
Po(persistant object)
persistant object:持久層對象
是ORM(Objevt Relational MApping)框架中Entity,PO屬性和數(shù)據(jù)庫中表的字段形成一一對應關(guān)系
用簡單的一段話來總結(jié)全過程,PO對應數(shù)據(jù)庫中的各個字段,在DAO層中轉(zhuǎn)化為Dto進行傳輸,最后以Vo的形式在業(yè)務層顯示。POJO是傳統(tǒng)意義的java對象,可脫離業(yè)務存在。