Java項目中的DO,DTO,VO,POJO


Java項目中的DO,DTO,VO,POJO

作為后端最常用的編程語言之一,Java 已經有很多年的歷史了,在阿里內部,Java 也是使用最廣泛的一門語言。在阿里實習的這段時間,規范一詞是我感受最深的。沒有規矩不成方圓,今天來說一下 Java 中的各種 O(bject)。

為什么會出現這些 O?

我們知道,這些 O 不管叫什么名字,其本質都還是對象(Object),既然本質都一樣,為什么非要給他們套上各種馬甲?個人認為原因有三:第一,隨着編程工業化的發展,需要有一套合理的體系出現。中國人喜歡造神,外國人喜歡造概念,於是 MVC、MVP、MVVM 等編程模型就出現了,為了搭配這些編程模型的使用,需要對 Object 的功能進行划分,於是我們便看到了這些層出不窮的 Object。當然這里並沒有批評這些概念的意思。其二,我認為在團隊協作編碼中,一個好的命名方式是可以節約很多時間成本的。就比如 getItemById 一眼看去就知道是通過 id 獲取一個 item 對象, ItemVO 一眼看去就知道是前端透出的 json 對應的對象。其三,如此划分,可以讓項目結構更加清楚,不至於出現東一塊西一塊,對象亂扔的局面。盡可能避免了在多人協作時對象混亂的情況。總的來說,這一切都是為了讓軟件編程更加合理、更加規范、更加高效。

有哪些 O?

這些 O 有很多衍生出的命名,比如 VO、DO、BO,這里我們把常見的 O 列舉出來,然后一一解釋。

以下內容參考阿里巴巴 Java 開發手冊,如果有需要可以在微信公眾號「01 二進制」后台回復「Java 開發手冊」獲得。

• DO( Data Object):與數據庫表結構一一對應,通過 DAO 層向上傳輸數據源對象。 • PO(Persistant Object):持久對象,一個 PO 的數據結構對應着庫中表的結構,表中的一條記錄就是一個 PO 對象 • DTO( Data Transfer Object):數據傳輸對象,Service 或 Manager 向外傳輸的對象。 • BO( Business Object):業務對象。由 Service 層輸出的封裝業務邏輯的對象。 • AO( Application Object):應用對象。在 Web 層與 Service 層之間抽象的復用對象模型,極為貼近展示層,復用度不高。 • VO( View Object):顯示層對象,通常是 Web 向模板渲染引擎層傳輸的對象。 • POJO( Plain Ordinary Java Object):POJO 專指只有 setter/getter/toString 的簡單類,包括 DO/DTO/BO/VO 等。 • DAO(Data Access Objects):數據訪問對象,和上面那些 O 不同的是,其功能是用於進行數據操作的。通常不會用於描述數據實體。

一下子給出 8 個常見的 O,光看解釋大家可能會有些迷糊,接下來我們從下面這張圖入手,帶大家直觀的感受下,這些 O 的用處。

數據的流向

img

我們知道,一般情況下,前端是不會憑空造出數據的,因此最后前端展示的數據一定是從數據庫中來的,數據的流向通常也是從數據庫流向頁面。我將其分成三個部分:數據訪問、業務處理和業務解釋。

\1. 數據訪問:這一部分是用於從數據庫中讀取數據,將數據記錄轉換成數據實體也就是 Java 對象,便於操作。 2. 業務處理:這一部分是數據流的核心,幾乎所有數據的操作都是在這一部分完成的。 3. 業務解釋:這一部分是用於展示給前端的數據,解釋業務體現在某些字段 / 值是需要經過處理的才會呈現的。

關鍵點

說了這么多,我們整理出以下關鍵點。

• DAO,是用於 操作數據 而不是描述數據的。 • PO/DO/Entity,其數據結構對應數據表中的一條記錄,因此是同一類別的。 • BO,可以理解為 PO 的組合,舉個簡單的例子,假設 PO 是一條交易記錄,BO 就可以是一個人全部的交易記錄集合對象。 • DTO,用於傳輸數據,可能傳遞給前端,也有可能傳遞給其他系統。用於 承載數據 。 • VO,這個最好理解,前端最后需要的數據長什么樣,對應的對象就是 VO。

如何使用這些 O?

說了這么多,在實際的項目中,我們應該如何去使用這些 O?

教條主義?

首先,這幾個概念很完整,但是我們在用的時候是必須按這個來做嗎?答案當然不是的,規矩是死的,人是活的。文章開頭我們就說了,之所以引入這些概念,很大程度上是為了提升編程體驗,而且系統和系統的復雜度不同,協作水平不同,完全沒有必要教條主義,適合自己的才是最好的。

省略方案

\1. 不管你是叫 PO 還是 DO 還是 Entity,用於描述數據庫記錄的對象一定要存在,不可省略。 2. DTO 和 BO 在一般情況下,如果業務系統不是非常復雜,可以考慮省略。 3. VO 和 DTO,DTO 可以用於將數據傳遞給前端,如果你不需要刪減字段的話,VO 可以考慮省略。

注意事項

領域模型命名規約:

• 數據對象:xxxDO,xxx 即為數據表名。 • 數據傳輸對象:xxxDTO,xxx 為業務領域相關的名稱。 • 展示對象:xxxVO,xxx 一般為網頁名稱。 • POJO 是 DO/DTO/BO/VO 的統稱,禁止命名成 xxxPOJO。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM