細(xì)心的人可能會(huì)發(fā)現(xiàn)仪芒,之前我這個(gè)圖中的領(lǐng)域?qū)嶓w對(duì)象圓其實(shí)有兩種畫法唁影,一種是底部有一條線耕陷,另一個(gè)是左側(cè)有一條線。這樣畫的目的是為了進(jìn)一步區(qū)分實(shí)體中那些是聚合根据沈,那些是普通實(shí)體啃炸。
那么什么是聚合根,按照我的理解卓舵,就是當(dāng)這個(gè)實(shí)體被創(chuàng)建時(shí)南用,他可以代表這個(gè)創(chuàng)建的最關(guān)鍵的線索,就是聚合根掏湾」妫可能這么解釋還是感覺不明白,那么我就用一個(gè)項(xiàng)目的案例來(lái)說(shuō)明融击,在金融系統(tǒng)中筑公,我們經(jīng)常有一個(gè)設(shè)計(jì)是“交易流水”,比如一筆支付單據(jù)尊浪,就有一筆支付交易流水匣屡,那么這個(gè)流水就代表了這個(gè)訂單一次支付處理過(guò)程,通過(guò)這個(gè)流水以及相關(guān)聯(lián)的日志拇涤,我們可以事后得出捣作,這筆訂單如何從一個(gè)初始狀態(tài),變?yōu)榱艘呀?jīng)支付狀態(tài)鹅士,所以往往我們?yōu)榱嘶厮萑辏覀儠?huì)將這個(gè)流水以及產(chǎn)生的信息,都會(huì)持久化到數(shù)據(jù)庫(kù)中掉盅,以方便后面業(yè)務(wù)的核查也拜。 在這里:這個(gè)支付過(guò)程和這個(gè)交易流水就是密切關(guān)聯(lián)的,可以這么說(shuō)趾痘,交易流水就是為了這次支付過(guò)程而誕生的慢哈,而且我們通過(guò)這個(gè)交易流水,我們也能夠反應(yīng)當(dāng)初那個(gè)過(guò)程永票。在這個(gè)交易過(guò)程中卵贱,我們可以認(rèn)為這個(gè)交易流水就是聚合根,一切的開始都是從他誕生開始瓦侮,事后他也代表了一次過(guò)程艰赞,那么這就是我理解的聚合根佣谐。
再回到我們實(shí)體劃分里面肚吏,你會(huì)發(fā)現(xiàn),眾多的實(shí)體的誕生狭魂,都是因?yàn)橐粋€(gè)動(dòng)作罚攀,那么如果這個(gè)實(shí)體動(dòng)作也反過(guò)來(lái)反應(yīng)一次業(yè)務(wù)動(dòng)作党觅,那么我們就可以這個(gè)動(dòng)作為一次聚合,同時(shí)認(rèn)為這個(gè)實(shí)體是這個(gè)聚合的聚合根斋泄。
那我們?yōu)槭裁匆獏^(qū)分聚合根了杯瞻?有兩方面的原因:在微服務(wù)中,為了系統(tǒng)的健壯性炫掐,我們可以要求所有的微服務(wù)都應(yīng)該滿足冪等性要求魁莉,如果所有的微服務(wù)都滿足這個(gè)特性,那么對(duì)于整體系統(tǒng)的高可用以及穩(wěn)定性都會(huì)帶來(lái)大幅度的提高募胃,那么當(dāng)一次調(diào)用旗唁,都會(huì)產(chǎn)生一條數(shù)據(jù)以及對(duì)象代表這次調(diào)用,通過(guò)對(duì)象的去重痹束,我們就得到了相應(yīng)服務(wù)的冪等性检疫;第二個(gè)原因,就是通過(guò)聚合根祷嘶,我們可以從數(shù)據(jù)層面就能夠反應(yīng)整個(gè)系統(tǒng)的調(diào)用過(guò)程屎媳,而且在一些特定的場(chǎng)景,我們完全可以有條件針對(duì)聚合根的數(shù)據(jù)论巍,來(lái)回溯系統(tǒng)的演進(jìn)過(guò)程烛谊。
那么針對(duì)聚合根還有幾個(gè)特性,我們需要了解一下:一次聚合的過(guò)程僅產(chǎn)生一個(gè)聚合根嘉汰;聚合根也是在微服務(wù)體系內(nèi)的晒来,不要設(shè)計(jì)跨服務(wù)的聚合根,特別不要設(shè)計(jì)長(zhǎng)事務(wù)的聚合根郑现。
在例舉的案例里面湃崩,底部有一條線圈就是一個(gè)聚合根。
可以看到我們認(rèn)為一次Command調(diào)用就是一個(gè)聚合接箫,Command對(duì)象就是相應(yīng)的聚合根攒读,那么我們就可以將所有的Command對(duì)象持久化到數(shù)據(jù)庫(kù)中,這樣可以代表了整個(gè)系統(tǒng)在Command側(cè)的演進(jìn)歷史辛友。這樣對(duì)后續(xù)業(yè)務(wù)和技術(shù)的支撐都是非常的有利薄扁。