DO、DTO和VO分層設計的好處
在日常的專案開發中,
VO
對應於頁面上需要顯示的資料(表單),DO
對應於資料庫中儲存的資料(資料表),DTO
對應於除二者之外需要進行傳遞的資料。
很多人可能對VO和DTO並不是那麼熟悉,相反對DO卻比較熟悉,那是因為在很多專案中由於種種原因我們只使用了DO,原因可能有以下幾種:
1、專案太小,對於一種業務實體,封裝成一個DO就夠了。
2、並不熟悉DTO、VO,更不知道他們之間的區別。
3、瞭解DO\DTO\VO之間的區別,但是懶得用。
那麼,這裡,博主再囉嗦一下為什麼要引入這麼多概念,為什麼我要建議大家在自己的專案中使用這些實體物件。
為什麼不能只用一個DO
我們來看這樣一個例子。假如我們的專案中由User這樣一個實體。我們在建立User表的時候一般包含一下屬性:
針對這個實體,我們通常需要建立一個DO類,用來封裝這個User實體。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public
class
UserDO {
private
Integer id; //唯一主鍵
private
Date createdTime; //建立時間
private
Date updatedTime; //最後更新時間
private
String name; //姓名
private
Integer age; //年齡
private
String gender; //性別
private
String address; //住址
private
String password; //密碼
private
String nickName; //暱稱
private
Date birthday; //生日
private
String politicalStatus; //政治面貌,1表示群眾,2表示團員,3表示黨員,4表示其他,100表示未知
private
Integer companyId; //公司的ID
private
Integer status; //資料狀態,1表示可用,0表示不可用
//setter
and getter
}
|
然後,在程式碼中,從DAO一直到前端展示,我們都通過這個UserDO類的物件來進行資料傳輸。這樣做會有什麼問題嘛?
- 不需要的欄位也會傳遞到前端頁面。
- 如password、createdTime、updatedTime和status這幾個欄位我們可能在前端根本不需要展示,但是這些欄位有可能也會被傳遞到前端(除非我們在SQL查詢的時候沒有查詢出對應的欄位)。這不僅使資料的傳輸量增大,還可能有安全性問題。
- 某些欄位需要轉換,但是無法支援。
- 對於上面例子中的政治面貌欄位,我們在資料庫中儲存的是數字,但是在前端頁面我要展示的是中文描述。這種情況只能在前端通過
if/else
的方式來分情況展示。
- 對於上面例子中的政治面貌欄位,我們在資料庫中儲存的是數字,但是在前端頁面我要展示的是中文描述。這種情況只能在前端通過
- 某些欄位要展示,但是並不希望出現在資料庫中
- 在User表中我們只儲存了這個使用者的companyId,需要同時查詢company表來查詢出該公司的更多詳細資訊。對於User物件,如果我們想在前端同時展示他所屬的公司,希望通過一次查詢全都查出來怎麼辦?有幾個簡單的方案,第一個是讓UserDO中包含一個Company類的屬性,通過這個屬性來傳遞。另外一種是把我們希望傳到前端的Company的屬性也寫到UserDO中。但是,如果真的這麼做了,那UserDO還能被稱作DO了嗎?
還有很多問題,這這裡就不詳細介紹了。
可見,使用一個DO從頭用到尾(從資料庫到前端頁面)並不是一種好的設計。
如何正確的使用DO、DTO、VO
對於上面的例子,我們可以將他設計成以下類。由於模型並不複雜,這裡只需要再引入VO就可以了。
UserDO已經和資料庫欄位一一對應了,這裡不需要修改。
1
2
3
4
5
6
7
8
9
10
相關推薦DO、DTO和VO分層設計的好處在日常的專案開發中,VO對應於頁面上需要顯示的資料(表單),DO對應於資料庫中儲存的資料(資料表),DTO對應於除二者之外需要進行傳遞的資料。 很多人可能對VO和DTO並不是那麼熟悉,相反對DO卻比較熟悉,那是因為在很多專案中由於種種原因我們只使用了 Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念ati 提高 處理 應用 簡單的 setter getter 行業 相關 PO(persistent object) 持久對象 在 o/r 映射的時候出現的概念,如果沒有 o/r 映射,沒有這個概念存在了。通常對應數據模型 ( 數據庫 ), 本身還有部分業務邏輯的處理。可 Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO之dozer mapper使用PO(persistant object) 持久物件 在 o/r 對映的時候出現的概念,如果沒有 o/r 對映,沒有這個概念存在了。通常對應資料模型 ( 資料庫 ), 本身還有部分業務邏輯的處理。可以看成是與資料庫中的表相對映的 java 物件。最簡單的 PO 就是對應資料庫中某個表中的一條 Java中 實體類 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念PO(persistant object) 持久物件 在 o/r 對映的時候出現的概念,如果沒有 o/r 對映,沒有這個概念存在了。通常對應資料模型 ( 資料庫 ), 本身還有部分業務邏輯的處理。可以看成是與資料庫中的表相對映的 java 物件。最簡單的 PO 就是對應資料庫中某個表中的一條記錄,多個記錄可 阿裏巴巴Java開發手冊中的DO、DTO、BO、AO、VO、POJO定義nes 抽象 超過 cat dao 對象 service query 數據 分層領域模型規約: DO( Data Object):與數據庫表結構一一對應,通過DAO層向上傳輸數據源對象。 DTO( Data Transfer Object):數據傳輸對象,Service或 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO在開發專案中概念PO(persistant object) 持久物件 在 o/r 對映的時候出現的概念,如果沒有 o/r 對映,沒有這個概念存在了。通常對應資料模型 ( 資料庫 ), 本身還有部分業務邏輯的處理。可以看成是與資料庫中的表相對映的 java 物件。最簡單的 PO 就是對應 (轉)MySQL之char、varchar和text的設計SQ 數值 abc dep 添加 pos sage character AC from: http://www.cnblogs.com/billyxp/p/3548540.html 最近有表結構設計中出現了varchar(10000)的設計引起了大家的討論,我們下面就 資訊保安工作OKR願景、戰略和目標的設計示例OKR是一套定義和跟蹤目標及其完成情況的管理工具和方法。本文定位於一個公司的資訊保安工作OKR設計,提供了一個設計嘗試與示例參考。幫助大家理解怎麼使用OKR來幫助設計資訊保安工作的目標和管理相關的任務。 一、願景 為公司的產品服務和技術系統的持續執行運營提供 領域驅動設計系列(2)淺析VO、DTO、DO、PO的概念、區別和用處服務 完全 session 並且 main 解決 業務 導致 teacher 上一篇文章作為一個引子,說明了領域驅動設計的優勢,從本篇文章開始,筆者將會結合自己的實際經驗,談及領域驅動設計的應用。本篇文章主要討論一下我們經常會用到的一些對象:VO、DTO、DO和PO。 領域驅動設計系列文章——淺析VO、DTO、DO、PO的概念、區別和用處本篇文章主要討論一下我們經常會用到的一些物件:VO、DTO、DO和PO。 由於不同的專案和開發人員有不同的命名習慣,這裡我首先對上述的概念進行一個簡單描述,名字只是個標識,我們重點關注其概念: 概念: VO(View Object):檢視物件,用於展示層,它的作用是把某 VO、DTO、DO、PO的概念、區別和用處運行時 需要 封面 數量 攔截 由於 css create ansi 轉至:http://qixuejia.cnblogs.com/ 本篇文章主要討論一下我們經常會用到的一些對象:VO、DTO、DO和PO。 由於不同的項目和開發人員有不同的命名習慣,這裏我首先對上述的概念進 關於VO、DTO、DO、PO的概念、區別和用處(轉)次數 博文 舉例 exce 時序 能夠 帥哥美女 一次 明顯 概念: VO(View Object):視圖對象,用於展示層,它的作用是把某個指定頁面(或組件)的所有數據封裝起來。 DTO(Data Transfer Object):數據傳輸對象,這個概念來源於J2EE的設計 淺析VO、DTO、DO、PO的概念、區別和用處概念: VO(View Object):檢視物件,用於展示層,它的作用是把某個指定頁面(或元件)的所有資料封裝起來。 DTO(Data Transfer Object):資料傳輸物件,這個概念來源於J2EE的設計模式,原來的目的是為了EJB的分散式應用提供粗粒度的資料實體 Java中PO、DO、TO、DTO、 VO、 BO、POJO 、DAO的概念操作方法 工作經歷 世界 get 包含 程序 base 進行 需要 1.PO(persistant object) 持久對象??在 o/r 映射的時候出現的概念,如果沒有 o/r 映射,沒有這個概念存在了。通常對應數據模型 ( 數據庫 ), 本身還有部分業務邏輯的處理。可以 VO、DTO、DO、PO知識點總結lang ima 從數據 -type 所有 gpo 初始 秘密 private 1、概念: VO(View Object) 視圖對象,用於展示層,它的作用是把某個指定頁面(或組件)的所有數據封裝起來。 DTO(Data Transfer Object Java中常見的物件型別簡述(DO、BO、DTO、VO、AO、PO)這些概念用於描述物件的型別;由於java是面向物件的語言;程式的世界就是各個物件之間的“互動”;在互動的工程中會存在多個層次,每個層次中所擁有(關注)的內容都是不一樣的; PO(Persistant Object) 持久物件 用於表示資料庫中的一條記錄對映成的 java 物件。PO 四種實體類型別概念:VO、DTO、DO、PO二、領域模型中的實體類 領域模型中的實體類分為四種類型:VO、DTO、DO、PO,各種實體類用於不同業務層次間的互動,並會在層次內實現實體類之間的轉化。 業務分層為:檢視層(VIEW+ACTION),服務層(SERVICE),持久層(DAO) 相應各層間實體的傳遞如下圖: 專案中我們並沒有嚴格遵循這種傳遞關 各種概念POJO、JAVABEAN、DAO、DTO、PO、VO、BO、SSH、EJB簡單 cts 取數據 bean strong 方式 不同的應用 enter 合規 轉自:https://my.oschina.net/pacoyang/blog/151695 POJO(pure old java object)是普通java類,有一些private的參數作 架構、框架和設計模式們的 設計模式的 發現 使用 特定 位置 業務邏輯層 工具 如果 軟件架構是系統的一個草圖,闡述了各個組件之間的通信,層次劃分,一旦系統開始詳細設計,架構藍圖就很難甚至無法改變。 例如:三層架構:一種設計軟件架構的思想。 通常意義上的三層架構就是將整個業務應用劃分為表示層( PO、POJO、BO、DTO、VO之間的區別(轉)per width 運行期 client 生成 swt sdn 圖片 access PO:persistent object持久對象 1 .有時也被稱為Data對象,對應數據庫中的entity,可以簡單認為一個PO對應數據庫中的一條記錄。 2 .在hibernate持久化框 |