一酌伊、序言
在使用MybatisPlus作為DAO層訪問(wèn)數(shù)據(jù)庫(kù)日益普及的今天璃俗,相應(yīng)數(shù)據(jù)模型的理解變得越發(fā)的重要涌乳。如何應(yīng)對(duì)企業(yè)級(jí)復(fù)雜多變的場(chǎng)景、如何將代碼書(shū)寫(xiě)的更為整潔间螟,這些都是廣大技術(shù)朋友需要思考的問(wèn)題。
本文將從實(shí)戰(zhàn)的角度帶來(lái)基于MybatisPlus作為DAO層訪問(wèn)數(shù)據(jù)庫(kù)的前提下损肛,解釋各種數(shù)據(jù)模型的內(nèi)涵以及數(shù)據(jù)模型之間的流轉(zhuǎn)問(wèn)題厢破。本文有視頻版,傳送門(mén)
紙上得來(lái)終覺(jué)淺治拿,深刻理解各種概念的內(nèi)涵只有通過(guò)實(shí)戰(zhàn)編碼摩泪,才能理解其概念的內(nèi)涵。
二劫谅、概念
1见坑、DO
DO稱為領(lǐng)域模型(Domain Object)嚷掠,此模型中字段屬性與數(shù)據(jù)庫(kù)字段具有某種一一對(duì)應(yīng)的聯(lián)系,一個(gè)不多一個(gè)不少荞驴,目的是屏蔽數(shù)據(jù)庫(kù)不皆,透明的進(jìn)行數(shù)據(jù)庫(kù)編程。
上述一一對(duì)應(yīng)的聯(lián)系通常是指下劃線轉(zhuǎn)駝峰等熊楼。
DO是使用MybatisPlus最為重要的數(shù)據(jù)模型霹娄,此模型甚至不需要顯示的表明便能輕易的識(shí)別。
2鲫骗、PO
一般來(lái)講犬耻,在做數(shù)據(jù)加工的過(guò)程中,單個(gè)DO的屬性過(guò)多执泰,實(shí)際上用不上那么多屬性枕磁,此時(shí)需要一個(gè)模型來(lái)做中間橋接工作。PO便應(yīng)運(yùn)而生坦胶,也是POJO大家庭的一部分透典。PO可繼承DO,也可以僅包含DO中部分屬性顿苇。
PO能夠完成數(shù)據(jù)字段屬性過(guò)濾的操作峭咒。
3、BO
如果PO在處理多個(gè)DO時(shí)纪岁,情況比較復(fù)雜凑队,那么可引入BO輔助完成上述操作。
4幔翰、VO
VO稱之為視圖對(duì)象(View Object)漩氨,一般來(lái)說(shuō)是指控制器返回給前端的最終的模型。不管是顯示的指明遗增,還是隱士的返回叫惊,從控制器返回的實(shí)體模型均可理解為VO,與實(shí)體類(lèi)命名無(wú)關(guān)做修。
5霍狰、DTO
DTO成為數(shù)據(jù)傳輸模型,顧名思義饰及,是作為傳輸數(shù)據(jù)使用的蔗坯。DTO廣泛應(yīng)用于子系統(tǒng)與子系統(tǒng)之間,不直接返回給前端燎含,DTO與VO的根本區(qū)別是VO是單向的宾濒,由控制器返回給前端即可;DTO是雙向的屏箍,既要能夠轉(zhuǎn)化為JSON數(shù)據(jù)绘梦,還要能夠解析為具體的DTO實(shí)體橘忱。
還有一種解釋是DTO作為控制器接收參數(shù)的實(shí)體,著實(shí)令人費(fèi)解:第一谚咬,API接口本著小而輕的原則鹦付,接口不會(huì)太復(fù)雜,因此使用普通參數(shù)或者借助DO完全能夠滿足大多數(shù)需求择卦。
少數(shù)重量提交接口敲长,特殊問(wèn)題特殊處理。
如果是為了參數(shù)隱藏而在控制器接收參數(shù)使用DTO秉继,不在討論范圍之內(nèi)祈噪。
在分析實(shí)體類(lèi)數(shù)據(jù)模型流轉(zhuǎn)問(wèn)題,一定要考慮少數(shù)情況與多數(shù)情況的問(wèn)題尚辑,這也是理論與實(shí)戰(zhàn)的本質(zhì)差別辑鲤。類(lèi)似于DDD,將系統(tǒng)拆分過(guò)細(xì)杠茬,看起來(lái)架構(gòu)很清楚月褥,實(shí)則增加開(kāi)發(fā)難度。
三瓢喉、小結(jié)
實(shí)際開(kāi)發(fā)中宁赤,概念是死的,編程是活的栓票。引入分層模型本質(zhì)上是為了使數(shù)據(jù)才加工過(guò)程中層次清晰决左,方便代碼復(fù)用,切不可為了分層而分層走贪,一定要有實(shí)際內(nèi)涵佛猛。