首先宣告下面是個人所想,并不一定正確,大家有不同的想法,歡迎在下方評論區進行討論,多交流才能有不一樣的理解!
1.先說明DTO與VO定義,entity就不說了,大家都懂,
DTO:資料傳輸物件(DTO)(Data Transfer Object),是一種設計模式之間傳輸資料的軟體應用系統,資料傳輸目標往往是資料訪問物件從資料庫中檢索資料,資料傳輸物件與資料互動物件或資料訪問物件之間的差異是一個以不具有任何行為除了存盤和檢索的資料(訪問和存取器),
VO:這里的VO是指(View Object)視圖物件,通俗的來說指的是包含前端頁面需要展示的資訊的一個物件,
2. entity(POJO),DTO與VO有什么關系?
首先POJO就是對應與資料庫中各種表,并且里面的欄位是一一對應的,這我想是共識,
DTO的話,在我看來它是在POJO的基礎上刪減(我們不想透露的資訊)或者增加(我們需要顯示的資訊)了某個欄位而形成的一個物體類,
VO的話,在我看來它是包含前端頁面想要展示資訊的一個物件,VO可以由不同的DTO組成,
3.舉個栗子

如上圖,這是一篇微博的截圖,我們可以把其簡單的分為三部分組成,藍色框的用戶資料(用戶頭像和用戶姓名),紅色框的帖子資訊以及黑色框的相關評論資訊,由這個頁面需要展示的資訊來說,我們可以定義一個VO物件,包含其中的需要展示的資訊,那么這個VO該由什么組成是我們所關注的一點,VO中所有展示的訊息都可以從我們的POJO(資料庫表)中獲取到,而如何將POJO中的資訊轉換稱為VO物件是我們關注的要點,而上面所說的DTO就是這樣一個起著橋梁作用的物件,
通過觀察我們可以看的出,帖子和對應的評論資訊中有著共同的部分,即用戶的頭像和用戶名,這都是屬于用戶資料,所以我們可以設計一個UserDto來保存所需要的資訊,但是這個UserDto又與我們的User類有一些區別,在UserDto中只含有在前端上我們想要的資料,并不僅僅局限于這里的用戶名和頭像,同理,帖子資訊可以用一個PostDto來保存,評論資訊可以用CommentDto保存,
從而這整個頁面對應的VO物件就是由這三個DTO組合而成,我們可以根據我們的POJO類,擴展出相應需要的DTO類,而前端頁面所需要展示的資訊則有VO來代表,從而每個VO都是由不同的DTO所組成,當然VO也可以包含其它VO,就像搭樂高積木一樣,DTO就是一個個積木塊,這樣設計的一個好處是,資料查詢的SQL陳述句可以簡單很多(至少我是這么認為,如果有不對,請糾正),
這樣設計以后,如果頁面需要展示的資訊更改了,我們也只需要更改組成該VO對應的DTO,
4.結束
以上只是一個菜鳥的一番見解,是我從前端頁面的角度出發,有關一番VO與DTO的解釋,所以難免有不正確的地方,如有不當,請指出!
“浩南”和我說,如果每個VO都是DTO的組合的話,會存在很高的耦合性,但是我并不認同這句話,就比如記憶體插條一樣,只要符合插槽的介面,管你是多少G記憶體(打個比方,可能不太恰當),
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/259206.html
標籤:其他
下一篇:GitKraken選單欄介紹
