事務(wù)腳本與領(lǐng)域模型

最近看了下《企業(yè)應(yīng)用架構(gòu)模式》,里面提到了事務(wù)腳本跟領(lǐng)域模型兩種建模方式,作者比較推崇領(lǐng)域模型,認(rèn)為在復(fù)雜業(yè)務(wù)下面可擴(kuò)展與可維護(hù)性更好。但是在實(shí)際工作中其實(shí)并沒有特別的體會,并且之前一直使用的都是類似事務(wù)腳本的方式,比較簡單易懂,不需要太多思維轉(zhuǎn)換與跳躍。

下面就列舉一下工作中使用兩種方式架構(gòu)對比下,體驗(yàn)下兩者的差異。

事務(wù)腳本

顧名思義,事務(wù)腳本即將每個用例作為一個腳本,使用數(shù)據(jù)庫編排的方式實(shí)現(xiàn),之前有一個操作余額的項(xiàng)目,基本功能包括創(chuàng)建賬戶,支付,提現(xiàn)等操作,使用的就是事務(wù)腳本,個人覺得代碼質(zhì)量還不錯,是工作中少有的比較有成就感的項(xiàng)目。

下圖是創(chuàng)建賬戶的操作

下圖是支付的操作


代碼包結(jié)構(gòu)


整體結(jié)構(gòu)

其中命令層使用的數(shù)據(jù)模型都是直接來自DB層的DO(dataobject),不過在DO中添加了一些業(yè)務(wù)語義,例如增加余額等方法。整個結(jié)構(gòu)很清晰,沒有增加一些額外的實(shí)體(與數(shù)據(jù)庫一一對應(yīng),而且與業(yè)務(wù)模型對應(yīng)),理解成本低,基本直接線性閱讀就可以理解。由于這個項(xiàng)目偏底層一些,屬于比較穩(wěn)定的基礎(chǔ)設(shè)施,后續(xù)需求非常少,因此擴(kuò)展性與維護(hù)性沒有實(shí)際校驗(yàn)。

領(lǐng)域模型

現(xiàn)在集團(tuán)都在推行領(lǐng)域模型,基本到了全民領(lǐng)域模型的地步了,下面就對團(tuán)隊負(fù)責(zé)的支付平臺為例,看看使用了領(lǐng)域模型的應(yīng)用一次調(diào)用過程。


其中至少涉及到了兩次的模型轉(zhuǎn)換,而且這些模型轉(zhuǎn)換之間往往一直都是同步變更的,這樣在修改一個模型時往往需要修改多個類,并非起到了隔離變化的作用。

使用領(lǐng)域模型的一個優(yōu)勢是可以將業(yè)務(wù)邏輯收斂(通常被認(rèn)為是穩(wěn)定的邏輯,更準(zhǔn)確應(yīng)該叫確認(rèn)性的邏輯,因?yàn)闃I(yè)務(wù)會變化),但是其實(shí)事務(wù)腳本的模型也可以實(shí)現(xiàn)類似的邏輯,不過不可否認(rèn),當(dāng)業(yè)務(wù)模型的關(guān)系變得復(fù)雜的時候,如果還是將數(shù)據(jù)層DO與業(yè)務(wù)邏輯放在一起會增加復(fù)雜性。

總結(jié)

其實(shí)無論是事務(wù)腳本還是領(lǐng)域模型也好,只要可以降低系統(tǒng)的復(fù)雜度,增加系統(tǒng)的可讀,可擴(kuò)展,可維護(hù)性就可以,當(dāng)系統(tǒng)業(yè)務(wù)邏輯并不是很復(fù)雜,使用事務(wù)腳本成本更低,而且可讀性更好。使用一層領(lǐng)域模型還增加一些額外成本,尤其是各個域都想著通過SPI的方式隔離變化,這樣會導(dǎo)致模型越來越多,而且之間的轉(zhuǎn)換也很多。關(guān)于架構(gòu)與設(shè)計的方法論很多,但是需要結(jié)合實(shí)踐來看,做到真正的可落地有實(shí)效的方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容