領域模型中的實體類分爲四種類型:VO、DTO、DO、PO

經常會接觸到VO,DO,DTO的概念,本文從領域建模中的實體劃分和項目中的實際應用情況兩個角度,對這幾個概念進行簡析。
得出的主要結論是:在項目應用中,VO對應於頁面上需要顯示的數據(表單),DO對應於數據庫中存儲的數據(數據表),DTO對應於除二者之外需要進行傳遞的數據。
一、實體類
百度百科中對於實體類的定義如下:
實體類的主要職責是存儲和管理系統內部的信息,它也可以有行爲,甚至很複雜的行爲,但這些行爲必須與它所代表的實體對象密切相關。
根據以上定義,我們可以瞭解到,實體類有兩方面內容,存儲數據和執行數據本身相關的操作。這兩方面內容對應到實現上,最簡單的實體類是POJO類,含有屬性及屬性對應的set和get方法,實體類常見的方法還有用於輸出自身數據的toString方法。


二、領域模型中的實體類
領域模型中的實體類分爲四種類型:VO、DTO、DO、PO,各種實體類用於不同業務層次間的交互,並會在層次內實現實體類之間的轉化。
業務分層爲:視圖層(VIEW+ACTION),服務層(SERVICE),持久層(DAO)
相應各層間實體的傳遞如下圖:

項目中我們並沒有嚴格遵循這種傳遞關係,但這種和業務層次的關聯對我們理解各實體類的作用是有幫助的。(我們沒有接觸到PO的原因,我理解爲ORM對PO進行了封裝)
以下是資料的原文,上圖是基於此繪製的:
概念:
VO(View Object):視圖對象,用於展示層,它的作用是把某個指定頁面(或組件)的所有數據封裝起來。
DTO(Data Transfer Object):數據傳輸對象,這個概念來源於J2EE的設計模式,原來的目的是爲了EJB的分佈式應用提供粗粒度的數據實體,以減少分佈式調用的次數,從而提高分佈式調用的性能和降低網絡負載,但在這裏,我泛指用於展示層與服務層之間的數據傳輸對象。
DO(Domain Object):領域對象,就是從現實世界中抽象出來的有形或無形的業務實體。
PO(PersistentObject):持久化對象,它跟持久層(通常是關係型數據庫)的數據結構形成一一對應的映射關係,如果持久層是關係型數據庫,那麼,數據表中的每個字段(或若干個)就對應PO的一個(或若干個)屬性。

模型:
下面以一個時序圖建立簡單模型來描述上述對象在三層架構應用中的位置
l 用戶發出請求(可能是填寫表單),表單的數據在展示層被匹配爲VO。
l 展示層把VO轉換爲服務層對應方法所要求的DTO,傳送給服務層。
l 服務層首先根據DTO的數據構造(或重建)一個DO,調用DO的業務方法完成具體業務。
l服務層把DO轉換爲持久層對應的PO(可以使用ORM工具,也可以不用),調用持久層的持久化方法,把PO傳遞給它,完成持久化操作。
l 對於一個逆向操作,如讀取數據,也是用類似的方式轉換和傳遞,略。
三、項目中的實體類
項目中常見的實體類有VO,DO和DTO,命名規則也常是以相應字符串結尾,如*VO.Java。但是DTO不總是遵循這個規則,而通常與他的用途有關,如寫成*Query.java,表示存儲了一個查詢條件。項目中實體類出現的業務層次也沒有這麼嚴格,例如我們可以在視圖層就組裝一個DO,也可以將一個VO從持久層傳出來,所以與業務分層相關聯的劃分方法顯得有些冗餘。從項目代碼中抽象出的理解是:VO對應於頁面上需要顯示的數據,DO對應於數據庫中存儲的數據,DTO對應於除二者之外需要進行傳遞的數據。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章