<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          DO,DTO,VO,POJO 敖丙還不知道?

          共 2517字,需瀏覽 6分鐘

           ·

          2020-07-28 12:12


          本文公眾號來源:01二進(jìn)制作者:雇個城管打天下本文已收錄至我的GitHub

          沒有規(guī)矩不成方圓,今天來說一下 Java 中的各種 O(bject)。

          為什么會出現(xiàn)這些 O?

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

          有哪些 O?

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

          以下內(nèi)容參考阿里巴巴 Java 開發(fā)手冊,如果有需要可以在微信公眾號「01 二進(jìn)制」后臺回復(fù)「Java 開發(fā)手冊」獲得。

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

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

          數(shù)據(jù)的流向

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

          1.數(shù)據(jù)訪問:這一部分是用于從數(shù)據(jù)庫中讀取數(shù)據(jù),將數(shù)據(jù)記錄轉(zhuǎn)換成數(shù)據(jù)實(shí)體也就是 Java 對象,便于操作。2.業(yè)務(wù)處理:這一部分是數(shù)據(jù)流的核心,幾乎所有數(shù)據(jù)的操作都是在這一部分完成的。3.業(yè)務(wù)解釋:這一部分是用于展示給前端的數(shù)據(jù),解釋業(yè)務(wù)體現(xiàn)在某些字段/值是需要經(jīng)過處理的才會呈現(xiàn)的。

          關(guān)鍵點(diǎn)

          說了這么多,我們整理出以下關(guān)鍵點(diǎn)。

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

          如何使用這些 O?

          說了這么多,在實(shí)際的項(xiàng)目中,我們應(yīng)該如何去使用這些 O?

          教條主義?

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

          省略方案

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

          注意事項(xiàng)

          領(lǐng)域模型命名規(guī)約:

          ?數(shù)據(jù)對象:xxxDO,xxx 即為數(shù)據(jù)表名。?數(shù)據(jù)傳輸對象:xxxDTO,xxx 為業(yè)務(wù)領(lǐng)域相關(guān)的名稱。?展示對象:xxxVO,xxx 一般為網(wǎng)頁名稱。?POJO 是 DO/DTO/BO/VO 的統(tǒng)稱,禁止命名成 xxxPOJO。

          各類知識點(diǎn)總結(jié)

          下面的文章都有對應(yīng)的原創(chuàng)精美PDF,在持續(xù)更新中,可以來找我催更~

          掃碼或者微信搜Java3y 免費(fèi)領(lǐng)取原創(chuàng)思維導(dǎo)圖、精美PDF。在公眾號回復(fù)「888」領(lǐng)取,PDF內(nèi)容純手打有任何不懂歡迎來問我。


          
           

          原創(chuàng)電子書
          42f48209dc53e3590a59e53527552b75.webp

          原創(chuàng)思維導(dǎo)圖

          fd52bd6219b9ddfb01c14a97d129117d.webp


          b9ebef2158b9ca72faee555f4cc9ce37.webp

          5a4c2f48d83d54a0eb0d56a75da00c2a.webp

          5a4c2f48d83d54a0eb0d56a75da00c2a.webp

          我是三歪,一個想要變強(qiáng)的男人,感謝大家的點(diǎn)贊收藏和轉(zhuǎn)發(fā),下期見。
          瀏覽 49
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品久久久久久久下载地址 | 人人插人人靠 | 91午夜视频 | 四虎永久在线无码视频 | 欧美小逼|