轉載:領域模型中的實體類分為四種型別:VO、DTO、DO、PO
轉載:https://blog.csdn.net/paincupid/article/details/49924299
經常會接觸到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對應於除二者之外需要進行傳遞的資料。
相關文章
- PO、VO、DTO、DO等淺析
- POJO、PO、DO、VO、DTO等淺析POJO
- Java中PO、DO、TO、DTO、 VO、 BO、POJO 、DAO的概念JavaPOJO
- 淺析VO、DTO、DO、PO的概念、區別和用處
- 專案中DO、PO、BO,DTO、VO的概念與意義
- VO/DTO/DO/PO通俗的解釋加上自己的理解
- Java | DO / DTO / BO / VO的區別Java
- 一款 IDEA 外掛幫你優雅轉化 DTO、VO、BO、PO、DOIdea
- java的幾種物件(PO,VO,DAO,BO,POJO,DTO)解釋Java物件POJO
- 融合模型分為四種型別(包括混合型)模型型別
- DTO轉VO工具
- Java開發中的幾種物件的說明(PO,VO,DTO,BO,POJO,DAO,SAO等)Java物件POJO
- 概念POJO、DTO、DAO、PO、BO、VO、ENTITY詳解POJO
- DO、DTO、BO、AO、VO、POJO定義規範POJO
- VO(檢視模型) 與 DTO(資料傳輸物件)的區別模型物件
- sap table 分為三種型別(轉)型別
- golang 中的四種型別轉換總結Golang型別
- 後端開發基礎概念 Entity,DAO,DO,DTO,VO, Service,Controller後端Controller
- 聊聊 C++ 中的四種型別轉換符C++型別
- vo bo dto pojo(entity)POJO
- Golang 中函式作為值與型別(轉載)Golang函式型別
- ELF檔案的四種分類
- Windows驅動分為如下幾種型別Windows型別
- Prometheus 四種metric型別Prometheus型別
- 第11章 使用類——型別轉換(二)將自定義型別轉換為內建型別型別
- 為什麼資料庫表的int型別欄位對映到實體類中要使用Integer型別,而不是int型別?...資料庫型別
- 在DDD中建立領域模型模型
- IT行業具體能細分為哪些領域呢?行業
- C++四種顯式型別轉換操作符C++型別
- 詳聊Java的四種引用型別Java型別
- 型別轉換工具類型別
- 定類,定序,定距,定比四種資料型別資料型別
- JS中其他資料型別轉為number資料型別的方法JS資料型別
- 邦芒寶典:職業規劃性格興趣愛好分為四種型別型別
- BIP研發知識:領域、單據型別、交易型別型別
- Devops是數字化轉型在IT領域的一個最佳實踐dev
- BigDecimal轉為String型別、int型別Decimal型別
- 領域驅動模型DDD(二)——領域事件的訂閱/釋出實踐模型事件