一、序言
在使用MybatisPlus作為DAO層訪問數(shù)據(jù)庫日益普及的今天,相應(yīng)數(shù)據(jù)模型的理解變得越發(fā)的重要。如何應(yīng)對企業(yè)級復(fù)雜多變的場景、如何將代碼書寫的更為整潔,這些都是廣大技術(shù)朋友需要思考的問題。
本文將從實戰(zhàn)的角度帶來基于MybatisPlus作為DAO層訪問數(shù)據(jù)庫的前提下,解釋各種數(shù)據(jù)模型的內(nèi)涵以及數(shù)據(jù)模型之間的流轉(zhuǎn)問題。本文有視頻版,傳送門
紙上得來終覺淺,深刻理解各種概念的內(nèi)涵只有通過實戰(zhàn)編碼,才能理解其概念的內(nèi)涵。
二、概念
1、DO
DO稱為領(lǐng)域模型(Domain Object),此模型中字段屬性與數(shù)據(jù)庫字段具有某種一一對應(yīng)的聯(lián)系,一個不多一個不少,目的是屏蔽數(shù)據(jù)庫,透明的進(jìn)行數(shù)據(jù)庫編程。
上述一一對應(yīng)的聯(lián)系通常是指下劃線轉(zhuǎn)駝峰等。
DO是使用MybatisPlus最為重要的數(shù)據(jù)模型,此模型甚至不需要顯示的表明便能輕易的識別。
2、PO
一般來講,在做數(shù)據(jù)加工的過程中,單個DO的屬性過多,實際上用不上那么多屬性,此時需要一個模型來做中間橋接工作。PO便應(yīng)運(yùn)而生,也是POJO大家庭的一部分。PO可繼承DO,也可以僅包含DO中部分屬性。
PO能夠完成數(shù)據(jù)字段屬性過濾的操作。
3、BO
如果PO在處理多個DO時,情況比較復(fù)雜,那么可引入BO輔助完成上述操作。
4、VO
VO稱之為視圖對象(View Object),一般來說是指控制器返回給前端的最終的模型。不管是顯示的指明,還是隱士的返回,從控制器返回的實體模型均可理解為VO,與實體類命名無關(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實體。
還有一種解釋是DTO作為控制器接收參數(shù)的實體,著實令人費(fèi)解:第一,API接口本著小而輕的原則,接口不會太復(fù)雜,因此使用普通參數(shù)或者借助DO完全能夠滿足大多數(shù)需求。
少數(shù)重量提交接口,特殊問題特殊處理。
如果是為了參數(shù)隱藏而在控制器接收參數(shù)使用DTO,不在討論范圍之內(nèi)。
在分析實體類數(shù)據(jù)模型流轉(zhuǎn)問題,一定要考慮少數(shù)情況與多數(shù)情況的問題,這也是理論與實戰(zhàn)的本質(zhì)差別。類似于DDD,將系統(tǒng)拆分過細(xì),看起來架構(gòu)很清楚,實則增加開發(fā)難度。
三、小結(jié)
實際開發(fā)中,概念是死的,編程是活的。引入分層模型本質(zhì)上是為了使數(shù)據(jù)才加工過程中層次清晰,方便代碼復(fù)用,切不可為了分層而分層,一定要有實際內(nèi)涵。