真的有必要定義VO,BO,PO,DO,DTO嗎?
今天給大家?guī)硪黄P(guān)于VO,BO,PO,DO,DTO
的文章,閱讀完這篇文章之后,希望大家對(duì)VO,BO,PO,DO,DTO
有自己的見解。
概念
在講具體的概念之前,我們先簡(jiǎn)單的講一講我們MVC
開發(fā)模式。
MVC的簡(jiǎn)單定義:
M
層負(fù)責(zé)與數(shù)據(jù)庫打交道;
C
層負(fù)責(zé)業(yè)務(wù)邏輯的編寫;
V
層負(fù)責(zé)給用戶展示(針對(duì)于前后端不分離的項(xiàng)目,不分離項(xiàng)目那種編寫模版的方式,理解V
的概念更直觀)。
而我們今天要說的VO,BO,PO,DO,DTO
呢,就是穿梭在這M、V、C
層之間的實(shí)體傳輸對(duì)象
。

VO(
View Object
):視圖對(duì)象,用于展示層,它的作用是把某個(gè)指定頁面(或組件)的所有數(shù)據(jù)封裝起來。DTO(
Data Transfer Object
):數(shù)據(jù)傳輸對(duì)象,這個(gè)概念來源于J2EE的設(shè)計(jì)模式,原來的目的是為了EJB的分布式應(yīng)用提供粗粒度的數(shù)據(jù)實(shí)體,以減少分布式調(diào)用的次數(shù),從而提高分布式調(diào)用的性能和降低網(wǎng)絡(luò)負(fù)載,但在這里,更符合泛指用于展示層與服務(wù)層之間的數(shù)據(jù)傳輸對(duì)象。BO(
Business Object
):業(yè)務(wù)對(duì)象,把業(yè)務(wù)邏輯封裝為一個(gè)對(duì)象,這個(gè)對(duì)象可以包括一個(gè)或多個(gè)其它的對(duì)象。PO(
Persistent Object
):持久化對(duì)象,它跟持久層(通常是關(guān)系型數(shù)據(jù)庫)的數(shù)據(jù)結(jié)構(gòu)形成一一對(duì)應(yīng)的映射關(guān)系,如果持久層是關(guān)系型數(shù)據(jù)庫,那么,數(shù)據(jù)表中的每個(gè)字段(或若干個(gè))就對(duì)應(yīng)PO的一個(gè)(或若干個(gè))屬性。DO(
Domain Object
):領(lǐng)域?qū)ο?/strong>,就是從現(xiàn)實(shí)世界中抽象出來的有形或無形的業(yè)務(wù)實(shí)體。
有必要用嗎?
項(xiàng)目中真的有必要定義VO,BO,PO,DO,DTO
嗎?
還是要理性看待這個(gè)問題,要看我們項(xiàng)目“目的地”是什么。
如果項(xiàng)目比較小,是一個(gè)簡(jiǎn)單的MVC
項(xiàng)目,又是單兵作戰(zhàn)
,我不建議使用VO,BO,PO,DO,DTO
,直接用POJO
負(fù)責(zé)各個(gè)層來傳輸就好,因?yàn)檫@種項(xiàng)目的“目的地”是快速完成。
而我們更多的時(shí)候,是持續(xù)迭代的團(tuán)隊(duì)協(xié)作項(xiàng)目,這個(gè)時(shí)候我們就建議用VO,BO,PO,DO,DTO
,而且團(tuán)隊(duì)內(nèi)要達(dá)成共識(shí),形成一個(gè)標(biāo)準(zhǔn)規(guī)范
。
業(yè)務(wù)復(fù)雜,人員協(xié)同性要求高的場(chǎng)景下,這些規(guī)范性的東西不按著來雖然不會(huì)出錯(cuò),程序照樣跑,但是遵守規(guī)范會(huì)讓程序更具擴(kuò)展性和可讀性;
讓類語義更明確,很容易知道類的含義;
其實(shí)就是提升項(xiàng)目的可擴(kuò)展性
、可維護(hù)性
與可閱讀性
。
提升這些性能的盡頭是經(jīng)濟(jì)效益
。
總結(jié)
這篇文章很短,最后稍微總結(jié)一下,不管用哪種方式,只要團(tuán)隊(duì)內(nèi)定義好一種適應(yīng)的協(xié)同規(guī)范就行。
沒有一個(gè)絕對(duì)好
與絕對(duì)壞
的方式方法。
團(tuán)隊(duì)規(guī)范的盡頭能提升項(xiàng)目的可擴(kuò)展性
、可維護(hù)性
與可閱讀性
,從而降低bug率。
另附這些概念命名規(guī)范:
數(shù)據(jù)對(duì)象:xxxPO,xxx即為數(shù)據(jù)表名。(也可DO)
數(shù)據(jù)傳輸對(duì)象:xxxDTO,xxx為業(yè)務(wù)領(lǐng)域相關(guān)的名稱。
展示對(duì)象:xxxVO,xxx一般為網(wǎng)頁名稱。
業(yè)務(wù)對(duì)象:xxxBO,xxx是業(yè)務(wù)名稱。