一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - springmvc分層領(lǐng)域模型概念詳解

springmvc分層領(lǐng)域模型概念詳解

2021-11-30 11:36紫荊果 Java教程

本文核心為分層領(lǐng)域模型(VO , PO , BO, DAO ,POJO等)概念的個人理解,結(jié)合springmvc淺談分層領(lǐng)域模型的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧

本文核心為分層領(lǐng)域模型VO , POBO, DAOPOJO等)概念的個人理解。

1.為什么出現(xiàn)分層領(lǐng)域模型這個東西?

(1)解決MVC架構(gòu)中各層(比如視圖層+控制層+服務(wù)層+數(shù)據(jù)訪問層+數(shù)據(jù)庫)中各層數(shù)據(jù)交互時,傳遞什么數(shù)據(jù)模型更加科學和合理。
(2)更好的降低MVC架構(gòu)中各層間的耦合性,提高層內(nèi)的內(nèi)聚性,這樣更方便對軟件進行維護
(3)一定程度上的提高信息的安全性,根據(jù)瀏覽器,可以知道視圖層和控制層傳輸?shù)臄?shù)據(jù)模型,但是很難準確定位其它各層傳輸?shù)念I(lǐng)域模型中的具體字段。

2.分層領(lǐng)域模型有哪些?

①VO(ViewObject)
顯示層對象,通常是Web向模板渲染引擎層傳輸?shù)膶ο螅ò⒗颙ava開發(fā)手冊分層領(lǐng)域模型),對于一個WEB頁面,用一個VO對象對應(yīng)整個界面的值。
②DTO(DataTransferObject)
數(shù)據(jù)傳輸對象,前后端分離開發(fā)模式中,前端與controller層數(shù)據(jù)交換,在java中作為數(shù)據(jù)傳輸,應(yīng)該進行序列化
③BO(Business Object)
業(yè)務(wù)對象,主要作用是把業(yè)務(wù)邏輯封裝成一個對象。這個對象可以包括一個或多個其它的對象,用來處理業(yè)務(wù)邏輯。有時候做開發(fā)時,當controller層調(diào)用Service層服務(wù)接口時,把DTO領(lǐng)域模型或者其它數(shù)據(jù)模型轉(zhuǎn)換為BO模型**,作為參數(shù)傳遞給Service接口。
④DAO(Data Access Object )
數(shù)據(jù)訪問層對象,主要用來封裝對數(shù)據(jù)庫的訪問,它是一個面向?qū)ο蟮臄?shù)據(jù)庫接口,負責持久層的操作,為業(yè)務(wù)層提供接口,主要用來封裝對數(shù)據(jù)庫的訪問,常見操作無外乎 CURD。在Mybatis中對應(yīng)的是Mapper。
⑤PO(Persistant Object)
持久對象,簡單說PO就是數(shù)據(jù)庫中的記錄,一個PO的數(shù)據(jù)結(jié)構(gòu)對應(yīng)著庫中表的結(jié)構(gòu),表中的一條記錄就是一個PO對象
通常PO里面除了get,set之外沒有別的方法
對于PO來說,數(shù)量是相對固定的,一定不會超過數(shù)據(jù)庫表的數(shù)量
等同于Entity,Entity基本等于POJO(Plain Ordinary Java Object)。
⑥D(zhuǎn)O
DO現(xiàn)在主要有兩個版本:
一個是阿里巴巴的開發(fā)手冊中的定義, DO(Data Object)這個等同于上面的PO.
另一個是在DDD(Domain-Driven Design)領(lǐng)域驅(qū)動設(shè)計中
DO(Domain Object)這個等同于上面的BO

3.分層領(lǐng)域模型的簡單理解

有圖有真相,別的慢扯,先上圖

springmvc分層領(lǐng)域模型概念詳解

3.1 VO和DTO的區(qū)別

(1)VO(Value Object)
這貨就是用來展示,就是界面(網(wǎng)頁,客戶端,APP)展示時,從后臺獲取的展示出的數(shù)據(jù)(在網(wǎng)頁中,VO主要以js里面的對象存在
(2)DTO(Data Transfer Object)
圖中,該類橫跨兩個層次,即有兩種存在形式:
①后端,DTO是以java對象的形式,前端傳遞的數(shù)據(jù)(目前主流是json),由框架(主流的springboot)轉(zhuǎn)為DTO形式
②前端:以js里面的對象(也可以簡單理解成json),比如
ajax請求中的數(shù)據(jù)體**
(3)主要區(qū)別
字段不一樣,VO往往根據(jù)展示業(yè)務(wù)的不同,刪減一部分DTO中的字段,因此也造就了值不一樣
比如DTO數(shù)據(jù)為

{
“name”:“kun”
“age”:100
}

展示業(yè)務(wù)一需要的數(shù)據(jù)(VO):

{
“age”:100
}

3.2BO和DTO的區(qū)別

(1)BO 業(yè)務(wù)對象
BO應(yīng)該說是一個業(yè)務(wù)對象,對應(yīng)著一類業(yè)務(wù),一類業(yè)務(wù)(BO)可能會有很多業(yè)務(wù)操作,換言之,BO會有很多針對自身數(shù)據(jù)進行計算的方法。比如springMVC中的service層中有很多service類,每個類除了get和set方法(@Autowired自動注入),還定義了很多調(diào)用Mapper(DAO)的方法.
(2)為什么圖中BO橫跨兩層
①現(xiàn)在很多持久層框架自身就提供了數(shù)據(jù)組合的功能。
②BO有可能是在業(yè)務(wù)層由業(yè)務(wù)來拼裝PO而成
③也有可能是在數(shù)據(jù)庫訪問層由框架直接生成
④很多情況下為了追求查詢的效率,框架跳過PO直接生成BO的情況非常普遍,PO只是用來增刪改使用
(3)BO和DTO的主要區(qū)別和聯(lián)系
BO是對內(nèi)(比如DAO等),DTO是對外(比如前端)
BO為了進行業(yè)務(wù)計算需要輔助數(shù)據(jù),輔助數(shù)據(jù)可能來自DTO。
③BO可以為上層提供的很多數(shù)據(jù),其中可能有DTO某些業(yè)務(wù)不需要的,因此DTO需要在BO的基礎(chǔ)上,只要自己需要的數(shù)據(jù),然后對外提供
④在這個關(guān)系上,通常不會有數(shù)據(jù)內(nèi)容的變化,內(nèi)容變化要么在BO內(nèi)部業(yè)務(wù)計算的時候完成,要么在解釋VO的時候完成

4.總結(jié)

(1)分層領(lǐng)域模型是偏理論,實際應(yīng)用的時候,根據(jù)所使用的框架進行切合實際的修改和省略。
(2)如果第一次接觸,建議按照教條進行操作,以方便加深理解。
(3)不要教條主義的前提,也有熟悉和理解教條主義,才能結(jié)合實際進行操作。

到此這篇關(guān)于springmvc分層領(lǐng)域模型概念詳解的文章就介紹到這了,更多相關(guān)springmvc分層領(lǐng)域模型內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://blog.csdn.net/qq_38182673/article/details/119837140

延伸 · 閱讀

精彩推薦
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發(fā)項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程xml與Java對象的轉(zhuǎn)換詳解

    xml與Java對象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發(fā)現(xiàn)了對于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程Java實現(xiàn)搶紅包功能

    Java實現(xiàn)搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現(xiàn)搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經(jīng)有好久沒有升過級了。升級完畢重啟之后,突然發(fā)現(xiàn)好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數(shù)據(jù)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
主站蜘蛛池模板: 亚洲精品视频导航 | 韩国三级理韩国三级理人伦 | 国产高清自拍视频 | 果冻传媒在线播放观看w | 国产成人高清亚洲一区91 | voyeur多毛厕所 | 亚洲高清国产品国语在线观看 | 亚洲国产情侣一区二区三区 | 免费免费啪视频在线观播放 | 小早川怜子息梦精在线播放 | 精品国产免费久久久久久 | 免费的毛片视频 | 高级黄色片 | 牛牛色婷婷在线视频播放 | 扒开放荡老师裙子猛烈的进入 | xxx老妇人60 xxxx意大利xxxxhd | 97热久久免费频精品99国产成人 | 无人影院在线播放视频 | 国产v日韩v欧美v精品专区 | 91po国产在线高清福利 | 超级乱淫变态伦短篇小说全集 | 国产成人精品一区二区不卡 | 色综合视频一区二区三区 | 亚洲成aⅴ人片在线 | 国产欧美精品一区二区三区 | 办公室大战秘书呻吟 | 粗了大了 整进去好爽视频 刺激一区仑乱 | 精品久久久久久无码人妻国产馆 | 久久精品国产在热亚洲完整版 | 暖暖的韩国免费观看 | 国产视频91在线 | 明星ai人脸替换脸忘忧草 | 国产精品一级香蕉一区 | 久久久久伊人 | 成在线人免费视频一区二区三区 | 亚洲精品123区在线观看 | 秋霞啪啪片 | 午夜无码片在线观看影院 | 俄罗斯烧性春三级k8播放 | 午夜影院在线免费观看 | 午夜大片在线观看 |