国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

VO,DTO,DO,PO的劃分

2019-11-15 00:22:53
字體:
來源:轉載
供稿:網友
VO,DTO,DO,PO的劃分實體類(VO,DTO,DO)的劃分

經常會接觸到VO,DO,DTO的概念,本文從領域建模中的實體劃分和項目中的實際應用情況兩個角度,對這幾個概念進行簡析。

得出的主要結論是:在項目應用中,VO對應于頁面上需要顯示的數據(表單),DO對應于數據庫中存儲的數據(數據表),DTO對應于除二者之外需要進行傳遞的數據。

一、實體類

百度百科中對于實體類的定義如下:

實體類的主要職責是存儲和管理系統內部的信息,它也可以有行為,甚至很復雜的行為,但這些行為必須與它所代表的實體對象密切相關。

根據以上定義,我們可以了解到,實體類有兩方面內容,存儲數據和執行數據本身相關的操作。這兩方面內容對應到實現上,最簡單的實體類是POJO類,含有屬性及屬性對應的set和get方法,實體類常見的方法還有用于輸出自身數據的toString方法。

實體類(VO,DO,DTO)的劃分

二、領域模型中的實體類

領域模型中的實體類分為四種類型:VO、DTO、DO、PO,各種實體類用于不同業務層次間的交互,并會在層次內實現實體類之間的轉化。

業務分層為:視圖層(VIEW+ACTION),服務層(SERVICE),持久層(DAO)

相應各層間實體的傳遞如下圖:

實體類(VO,DO,DTO)的劃分

項目中我們并沒有嚴格遵循這種傳遞關系,但這種和業務層次的關聯對我們理解各實體類的作用是有幫助的。(我們沒有接觸到PO的原因,我理解為ORM對PO進行了封裝)

以下是資料的原文,上圖是基于此繪制的:

概念:

VOViewObject):視圖對象,用于展示層,它的作用是把某個指定頁面(或組件)的所有數據封裝起來。

DTOData TransferObject):數據傳輸對象,這個概念來源于J2EE的設計模式,原來的目的是為了EJB的分布式應用提供粗粒度的數據實體,以減少分布式調用的次數,從而提高分布式調用的性能和降低網絡負載,但在這里,我泛指用于展示層與服務層之間的數據傳輸對象。

DODomainObject):領域對象,就是從現實世界中抽象出來的有形或無形的業務實體。

POPersistentObject):持久化對象,它跟持久層(通常是關系型數據庫)的數據結構形成一一對應的映射關系,如果持久層是關系型數據庫,那么,數據表中的每個字段(或若干個)就對應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對應于除二者之外需要進行傳遞的數據。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玛多县| 澳门| 潼南县| 亚东县| 伽师县| 阜城县| 华坪县| 肥东县| 宜州市| 当雄县| 汉阴县| 岑溪市| 文山县| 潍坊市| 通化市| 灵丘县| 天峻县| 松阳县| 湘潭市| 荃湾区| 江北区| 墨竹工卡县| 安新县| 谢通门县| 涿鹿县| 东台市| 贵定县| 靖远县| 鹤岗市| 大庆市| 临泽县| 信阳市| 远安县| 平江县| 诏安县| 宝山区| 治县。| 上林县| 石嘴山市| 隆回县| 华坪县|