概念:
- VO(View Object):視圖對象,用于展示層初茶,它的作用是把某個(gè)指定頁面(或組件)的所有數(shù)據(jù)封裝起來颗祝。
- DTO(Data Transfer Object):數(shù)據(jù)傳輸對象,這個(gè)概念來源于J2EE的設(shè)計(jì)模式恼布,原來的目的是為了EJB的分布式應(yīng)用提供粗粒度的數(shù)據(jù)實(shí)體螺戳,以減少分布式調(diào)用的次數(shù),從而提高分布式調(diào)用的性能和降低網(wǎng)絡(luò)負(fù)載折汞,但在這里倔幼,我泛指用于展示層與服務(wù)層之間的數(shù)據(jù)傳輸對象。
- DO(Domain Object):領(lǐng)域?qū)ο笏褪菑默F(xiàn)實(shí)世界中抽象出來的有形或無形的業(yè)務(wù)實(shí)體损同。
- PO(Persistent Object):持久化對象翩腐,它跟持久層(通常是關(guān)系型數(shù)據(jù)庫)的數(shù)據(jù)結(jié)構(gòu)形成一一對應(yīng)的映射關(guān)系,如果持久層是關(guān)系型數(shù)據(jù)庫膏燃,那么茂卦,數(shù)據(jù)表中的每個(gè)字段(或若干個(gè))就對應(yīng)PO的一個(gè)(或若干個(gè))屬性。
下面以一個(gè)時(shí)序圖建立簡單模型來描述上述對象在三層架構(gòu)應(yīng)用中的位置
l 用戶發(fā)出請求(可能是填寫表單)组哩,表單的數(shù)據(jù)在展示層被匹配為VO等龙。
l 展示層把VO轉(zhuǎn)換為服務(wù)層對應(yīng)方法所要求的DTO,傳送給服務(wù)層伶贰。
l 服務(wù)層首先根據(jù)DTO的數(shù)據(jù)構(gòu)造(或重建)一個(gè)DO蛛砰,調(diào)用DO的業(yè)務(wù)方法完成具體業(yè)務(wù)。
l服務(wù)層把DO轉(zhuǎn)換為持久層對應(yīng)的PO(可以使用ORM工具黍衙,也可以不用)泥畅,調(diào)用持久層的持久化方法,把PO傳遞給它们豌,完成持久化操作涯捻。
l 對于一個(gè)逆向操作,如讀取數(shù)據(jù)望迎,也是用類似的方式轉(zhuǎn)換和傳遞障癌,略。
三辩尊、項(xiàng)目中的實(shí)體類
項(xiàng)目中常見的實(shí)體類有VO涛浙,DO和DTO,命名規(guī)則也常是以相應(yīng)字符串結(jié)尾摄欲,如VO.Java轿亮。但是DTO不總是遵循這個(gè)規(guī)則,而通常與他的用途有關(guān)胸墙,如寫成Query.java我注,表示存儲了一個(gè)查詢條件。項(xiàng)目中實(shí)體類出現(xiàn)的業(yè)務(wù)層次也沒有這么嚴(yán)格迟隅,例如我們可以在視圖層就組裝一個(gè)DO但骨,也可以將一個(gè)VO從持久層傳出來,所以與業(yè)務(wù)分層相關(guān)聯(lián)的劃分方法顯得有些冗余智袭。從項(xiàng)目代碼中抽象出的理解是:VO對應(yīng)于頁面上需要顯示的數(shù)據(jù)奔缠,DO對應(yīng)于數(shù)據(jù)庫中存儲的數(shù)據(jù),DTO對應(yīng)于除二者之外需要進(jìn)行傳遞的數(shù)據(jù)吼野。