各個命名的含義
domain
domain這個包國外很多項目經(jīng)常用到起宽,字面意思是域的意思洲胖。
DAO
DAO(Data Access Object)數(shù)據(jù)訪問對象,它是一個面向?qū)ο蟮臄?shù)據(jù)庫接口坯沪,負責持久層的操作绿映,為業(yè)務層提供接口,主要用來封裝對數(shù)據(jù)庫的訪問腐晾,常見操作無外乎 CURD叉弦。我們也可以認為一個 DAO 對應一個 POJO 的對象,它位于業(yè)務邏輯與數(shù)據(jù)庫資源中間藻糖,可以結(jié)合 PO 對數(shù)據(jù)庫進行相關的操作淹冰。(不怎么用)
POJO
POJO(Plain Ordinary Java Object)簡單的 Java 對象,實際就是普通的 JavaBeans巨柒,是為了避免和 EJB(Enterprise JavaBean)混淆所創(chuàng)造的簡稱樱拴。POJO 實質(zhì)上可以理解為簡單的實體類凝颇,其中有一些屬性及其getter和setter方法的類,沒有業(yè)務邏輯疹鳄,也不允許有業(yè)務方法拧略,也不能攜帶有connection之類的方法。POJO 是 JavaEE 世界里面最靈活的對象瘪弓,在簡單系統(tǒng)中垫蛆,如果從數(shù)據(jù)庫到頁面展示都是 POJO 的話,它可以是 DTO腺怯;如果從數(shù)據(jù)庫中到業(yè)務處理中都是 POJO 的話袱饭,它可以是 BO;如果從數(shù)據(jù)庫到整個頁面的展示的話呛占,它也可以是 VO虑乖。
po
PO(Persistent Object)持久層對象,它是由一組屬性和屬性的get和set方法組成晾虑,最簡單的 PO 就是對應數(shù)據(jù)庫中某個表中的一條記錄(也就是說疹味,我們可以將數(shù)據(jù)庫表中的一條記錄理解為一個持久層對象),多個記錄可以用 PO 的集合帜篇,PO 中應該不包含任何對數(shù)據(jù)庫的操作糙捺。PO 的屬性是跟數(shù)據(jù)庫表的字段一一對應的,此外 PO 對象需要實現(xiàn)序列化接口笙隙。
bo
BO(Business Object)業(yè)務層對象洪灯,是簡單的真實世界的軟件抽象,通常位于中間層竟痰。BO 的主要作用是把業(yè)務邏輯封裝為一個對象签钩,這個對象可以包括一個或多個其它的對象。舉一個求職簡歷的例子坏快,每份簡歷都包括教育經(jīng)歷铅檩、項目經(jīng)歷等,我們可以讓教育經(jīng)歷和項目經(jīng)歷分別對應一個 PO假消,這樣在我們建立對應求職簡歷的 BO 對象處理簡歷的時候柠并,讓每個 BO 都包含這些 PO 即可岭接。
vo
VO(View Object)值對象富拗,通常用于業(yè)務層之間的數(shù)據(jù)傳遞,和 PO 一樣也是僅僅包含數(shù)據(jù)而已鸣戴,但 VO 應該是抽象出的業(yè)務對象啃沪,可以和表對應,也可以不對應窄锅,這根據(jù)業(yè)務的需要创千。 如果鍋碗瓢盆分別為對應的業(yè)務對象的話缰雇,那么整個碗柜就是一個值對象。此外追驴,VO 也可以稱為頁面對象械哟,如果稱為頁面對象的話,那么它所代表的將是整個頁面展示層的對象殿雪,也可以由需要的業(yè)務對象進行組裝而來暇咆。
dto
DTO(Data Transfer Object)數(shù)據(jù)傳輸對象,主要用于遠程調(diào)用等需要大量傳輸對象的地方丙曙,比如我們有一個交易訂單表爸业,含有 25 個字段,那么其對應的 PO 就有 25 個屬性亏镰,但我們的頁面上只需要顯示 5 個字段扯旷,因此沒有必要把整個 PO 對象傳遞給客戶端,這時我們只需把僅有 5 個屬性的 DTO 把結(jié)果傳遞給客戶端即可索抓,而且如果用這個對象來對應界面的顯示對象钧忽,那此時它的身份就轉(zhuǎn)為 VO。使用 DTO 的好處有兩個逼肯,一是能避免傳遞過多的無用數(shù)據(jù)惰瓜,提高數(shù)據(jù)的傳輸速度;二是能隱藏后端的表結(jié)構(gòu)汉矿。常見的用法是:將請求的數(shù)據(jù)或?qū)傩越M裝成一個 RequestDTO崎坊,再將響應的數(shù)據(jù)或?qū)傩越M裝成一個 ResponseDTO.