日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VO,BO,PO,DO,DTO的区别

發布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VO,BO,PO,DO,DTO的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

面對這個圖,讓我們先從承上啟下的DTO開始入手

DTO(Data Transfer Object)數據傳輸對象

這個傳輸通常指的前后端之間的傳輸

DTO是一個比較特殊的對象,他有兩種存在形式:

在后端,他的存在形式是java對象,也就是在controller里面定義的那個東東,通常在后端不需要關心怎么從json轉成java對象的,這個都是由一些成熟的框架幫你完成啦,比如spring框架

在前端,他的存在形式通常是js里面的對象(也可以簡單理解成json),也就是通過ajax請求的那個數據體

這也是為什么把他畫成橫跨兩層的原因

這里可能會遇到個問題,現在微服務盛行,服務和服務之間調用的傳輸對象能叫DTO嗎?
我的理解是看情況
DTO本身的一個隱含的意義是要能夠完整的表達一個業務模塊的輸出
如果服務和服務之間相對獨立,那就可以叫DTO
如果服務和服務之間不獨立,每個都不是一個完整的業務模塊,拆開可能僅僅是因為計算復雜度或者性能的問題,那這就不能夠叫做DTO,只能是BO

VO(Value Object)值對象
VO就是展示用的數據,不管展示方式是網頁,還是客戶端,還是APP,只要是這個東西是讓人看到的,這就叫VO
VO主要的存在形式就是js里面的對象(也可以簡單理解成json)

VO和DTO的區別
主要有兩個區別
一個是字段不一樣,VO根據需要會刪減一些字段
另一個是值不一樣,VO會根據需要對DTO中的值進行展示業務的解釋
舉個簡單的例子
DTO可能是這樣的

{"gender":"男", "age":35 }

對于業務一來說只需要性別,而且因為是一個古風聊天室,也不能直接展示男,因此經過業務解釋業務一的VO是

{ "gender":"公子" }

對于業務二來說只需要年齡,而且不需要精確的年齡,因此經過業務解釋業務二的VO是

{ "age":"30~39" }

PO(Persistant Object)持久對象
PO比較好理解
簡單說PO就是數據庫中的記錄,一個PO的數據結構對應著庫中表的結構,表中的一條記錄就是一個PO對象
通常PO里面除了get,set之外沒有別的方法
對于PO來說,數量是相對固定的,一定不會超過數據庫表的數量
等同于Entity,這倆概念是一致的

BO(Business Object)業務對象
BO就是PO的組合
簡單的例子比如說PO是一條交易記錄,BO是一個人全部的交易記錄集合對象
復雜點兒的例子PO1是交易記錄,PO2是登錄記錄,PO3是商品瀏覽記錄,PO4是添加購物車記錄,PO5是搜索記錄,BO是個人網站行為對象
BO是一個業務對象,一類業務就會對應一個BO,數量上沒有限制,而且BO會有很多業務操作,也就是說除了get,set方法以外,BO會有很多針對自身數據進行計算的方法
為什么BO也畫成橫跨兩層呢?原因是現在很多持久層框架自身就提供了數據組合的功能,因此BO有可能是在業務層由業務來拼裝PO而成,也有可能是在數據庫訪問層由框架直接生成
很多情況下為了追求查詢的效率,框架跳過PO直接生成BO的情況非常普遍,PO只是用來增刪改使用

BO和DTO的區別
這兩個的區別主要是就是字段的刪減
BO對內,為了進行業務計算需要輔助數據,或者是一個業務有多個對外的接口,BO可能會含有很多接口對外所不需要的數據,因此DTO需要在BO的基礎上,只要自己需要的數據,然后對外提供
在這個關系上,通常不會有數據內容的變化,內容變化要么在BO內部業務計算的時候完成,要么在解釋VO的時候完成

OK,到這里這些關系基本就理清楚了

等等,DO是什么
DO呢,標題不是還有個DO么?
上面這些概念基本上已經涵蓋了全部的流程,DO只是跟其中一個概念相同
但是跟哪個概念相同呢?
現在主要有兩個版本
一個是阿里巴巴的開發手冊中的定義
DO( Data Object)這個等同于上面的PO
另一個是在DDD(Domain-Driven Design)領域驅動設計中
DO(Domain Object)這個等同于上面的BO

最后,讓我們再說說實際應用
這幾個概念很完整,我們在用的時候是必須按這個來做嗎?
當然不是的,系統和系統的復雜度不同,協作水平不同,完全沒有必要教條主義,這些概念全上
上哪些概念,省哪些,我給一些實際建議
1,PO這個沒法省,不管叫PO還是Entity,怎么著都得有
2,一些工具類的系統和一些業務不是很復雜的系統DTO是可以和BO合并成一個,當業務擴展的時候注意拆分就行
3,VO是可以第一個優化掉的,展示業務不復雜的可以壓根兒不要,直接用DTO
4,這也是最重要的一條,概念是給人用的,多人協作的時候一定要保證大家的概念一致,趕緊把這篇文章轉發給跟你協作的人吧

?

總結

以上是生活随笔為你收集整理的VO,BO,PO,DO,DTO的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。