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 開發手冊」得到。json

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 的用處。微信

數據的流向

咱們知道,通常狀況下,前端是不會憑空造出數據的,所以最後前端展現的數據必定是從數據庫中來的,數據的流向一般也是從數據庫流向頁面。我將其分紅三個部分:數據訪問、業務處理和業務解釋。數據結構

1.數據訪問:這一部分是用於從數據庫中讀取數據,將數據記錄轉換成數據實體也就是 Java 對象,便於操做。2.業務處理:這一部分是數據流的核心,幾乎全部數據的操做都是在這一部分完成的。3.業務解釋:這一部分是用於展現給前端的數據,解釋業務體如今某些字段/值是須要通過處理的纔會呈現的。編程語言

關鍵點

說了這麼多,咱們整理出如下關鍵點。編碼

DAO,是用於操做數據而不是描述數據的。PO/DO/Entity,其數據結構對應數據表中的一條記錄,所以是同一類別的。BO,能夠理解爲 PO 的組合,舉個簡單的例子,假設 PO 是一條交易記錄,BO 就能夠是一我的所有的交易記錄集合對象。DTO,用於傳輸數據,可能傳遞給前端,也有可能傳遞給其餘系統。用於承載數據VO,這個最好理解,前端最後須要的數據長什麼樣,對應的對象就是 VO。spa

如何使用這些 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。

最後

以上就是本篇文章的所有內容了,若是你以爲本篇文章對你有所幫助,不妨關注支持一下。


本文分享自微信公衆號 - 01二進制(gh_d1999add1857)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索