最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年08月23日 11:35:13   作者:紫荊果  
本文核心為分層領(lǐng)域模型(VO , PO , BO, DAO ,POJO等)概念的個(gè)人理解,結(jié)合springmvc淺談分層領(lǐng)域模型的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧

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

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

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

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

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

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

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

在這里插入圖片描述

3.1 VO和DTO的區(qū)別

(1)VO(Value Object)
這貨就是用來展示,就是界面(網(wǎng)頁,客戶端,APP)展示時(shí),從后臺(tái)獲取的展示出的數(shù)據(jù)(在網(wǎng)頁中,VO主要以js里面的對象存在
(2)DTO(Data Transfer Object)
圖中,該類橫跨兩個(gè)層次,即有兩種存在形式:
①后端,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)該說是一個(gè)業(yè)務(wù)對象,對應(yīng)著一類業(yè)務(wù),一類業(yè)務(wù)(BO)可能會(huì)有很多業(yè)務(wù)操作,換言之,BO會(huì)有很多針對自身數(shù)據(jù)進(jìn)行計(jì)算的方法。比如springMVC中的service層中有很多service類,每個(gè)類除了get和set方法(@Autowired自動(dòng)注入),還定義了很多調(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為了進(jìn)行業(yè)務(wù)計(jì)算需要輔助數(shù)據(jù),輔助數(shù)據(jù)可能來自DTO。
③BO可以為上層提供的很多數(shù)據(jù),其中可能有DTO某些業(yè)務(wù)不需要的,因此DTO需要在BO的基礎(chǔ)上,只要自己需要的數(shù)據(jù),然后對外提供
④在這個(gè)關(guān)系上,通常不會(huì)有數(shù)據(jù)內(nèi)容的變化,內(nèi)容變化要么在BO內(nèi)部業(yè)務(wù)計(jì)算的時(shí)候完成,要么在解釋VO的時(shí)候完成

4.總結(jié)

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

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

相關(guān)文章

  • IDEA導(dǎo)入JDBC驅(qū)動(dòng)的jar包步驟詳解

    IDEA導(dǎo)入JDBC驅(qū)動(dòng)的jar包步驟詳解

    JDBC是一種底層的API,是連接數(shù)據(jù)庫和Java應(yīng)用程序的紐帶,因此我們在訪問數(shù)據(jù)庫時(shí)需要在業(yè)務(wù)邏輯層中嵌入SQL語句,這篇文章主要介紹了IDEA導(dǎo)入JDBC驅(qū)動(dòng)的jar包,需要的朋友可以參考下
    2023-07-07
  • Java+Selenium實(shí)現(xiàn)控制瀏覽器的啟動(dòng)選項(xiàng)Options

    Java+Selenium實(shí)現(xiàn)控制瀏覽器的啟動(dòng)選項(xiàng)Options

    這篇文章主要為大家詳細(xì)介紹了如何使用java代碼利用selenium控制瀏覽器的啟動(dòng)選項(xiàng)Options的代碼操作,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2023-01-01
  • 一文搞懂Java SPI機(jī)制的原理與使用

    一文搞懂Java SPI機(jī)制的原理與使用

    Java 程序員在日常工作中經(jīng)常會(huì)聽到 SPI,而且很多框架都使用了 SPI 的技術(shù),那么問題來了,到底什么是 SPI 呢?今天小編就帶大家好好了解一下 SPI
    2022-10-10
  • Java實(shí)現(xiàn)Token工具類進(jìn)行登錄和攔截

    Java實(shí)現(xiàn)Token工具類進(jìn)行登錄和攔截

    在應(yīng)用的登錄時(shí)需要生成token進(jìn)行驗(yàn)證,并放入信息,之后的話可以直接使用瀏覽器的session進(jìn)行登錄,本文就來利用java編寫一個(gè)token工具類,可以很方便的生成和解析token,感興趣的可以了解下
    2023-12-12
  • 在Java中輕松將HTML格式文本轉(zhuǎn)換為純文本的方法示例(保留換行)

    在Java中輕松將HTML格式文本轉(zhuǎn)換為純文本的方法示例(保留換行)

    這篇文章主要介紹了在Java中輕松將HTML格式文本轉(zhuǎn)換為純文本的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Java多線程之線程池七個(gè)參數(shù)詳解

    Java多線程之線程池七個(gè)參數(shù)詳解

    這篇文章主要介紹了Java多線程之線程池七個(gè)參數(shù)詳解,文中有很詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • 基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn)代碼

    基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn)代碼

    這篇文章主要介紹了基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn),從泛化調(diào)用實(shí)現(xiàn)的過程來看,我們可以對自己提供所有服務(wù)進(jìn)行測試,不需要引入調(diào)用的接口,減少代碼的侵入,需要的朋友可以參考下
    2022-04-04
  • IDEA中啟動(dòng)多個(gè)SpringBoot服務(wù)的實(shí)現(xiàn)示例

    IDEA中啟動(dòng)多個(gè)SpringBoot服務(wù)的實(shí)現(xiàn)示例

    本文主要介紹了IDEA中啟動(dòng)多個(gè)SpringBoot服務(wù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • java控制線程運(yùn)行

    java控制線程運(yùn)行

    這篇文章主要介紹了java控制線程運(yùn)行,需要的朋友可以參考下
    2014-04-04
  • 在Spring Data JPA中引入Querydsl的實(shí)現(xiàn)方式

    在Spring Data JPA中引入Querydsl的實(shí)現(xiàn)方式

    這篇文章主要介紹了在Spring Data JPA中引入Querydsl的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評(píng)論

安多县| 壤塘县| 安阳市| 察哈| 虞城县| 南宫市| 江北区| 福清市| 蕉岭县| 聂拉木县| 浦江县| 虞城县| 永春县| 阳朔县| 康定县| 南城县| 安阳市| 平泉县| 丰镇市| 遵化市| 博野县| 沈阳市| 米脂县| 云南省| 中方县| 庆云县| 葫芦岛市| 三门峡市| 天峨县| 乐亭县| 微山县| 同德县| 盘锦市| 商南县| 晋宁县| 长乐市| 泸西县| 汝城县| 长宁区| 玉龙| 大同县|