在單體應(yīng)用時(shí)代集晚,我們是非常重視數(shù)據(jù)庫(kù)的設(shè)計(jì)的晌砾,因?yàn)橹挥姓谶\(yùn)行的數(shù)據(jù)庫(kù)和程序反應(yīng)了業(yè)務(wù)事實(shí)攀甚。所以當(dāng)我們需要了解一個(gè)系統(tǒng)的業(yè)務(wù)時(shí)吞瞪,如果沒(méi)有數(shù)據(jù)庫(kù)表設(shè)計(jì)文檔馁启,可以想象系統(tǒng)維護(hù)升級(jí)如同一場(chǎng)災(zāi)難。
在DDD中芍秆,我們也有與之向?qū)?yīng)的東西:實(shí)體惯疙。但在考慮和設(shè)計(jì)實(shí)體時(shí),是不考慮其如何存儲(chǔ)的妖啥,所以在我看來(lái)實(shí)體和庫(kù)表設(shè)計(jì)很像霉颠,但又不是一回事:比如庫(kù)表設(shè)計(jì)考慮關(guān)聯(lián)關(guān)系,實(shí)體雖然也考慮荆虱,但這個(gè)不是特別重要蒿偎,我個(gè)人認(rèn)為考慮實(shí)體要考慮這個(gè)實(shí)體的歸屬,即設(shè)計(jì)實(shí)體一定是基于領(lǐng)域劃分之內(nèi)的怀读,也就是說(shuō)這個(gè)實(shí)體設(shè)計(jì)時(shí)酥郭,你應(yīng)該考慮由哪一個(gè)限界上下文來(lái)維護(hù)其 生老病死,這才是重中之重愿吹。
那我們先來(lái)解釋什么是限界上下文不从?
限界上下文可以通俗的講就是你的微服務(wù)中的一個(gè)微服務(wù)。上一篇我們的確劃分了領(lǐng)域犁跪,但領(lǐng)域并不等同于微服務(wù)椿息。在一個(gè)領(lǐng)域內(nèi),有眾多的實(shí)體對(duì)象坷衍,那么這些實(shí)體對(duì)象的出生寝优,更新,到最后的死亡枫耳,都應(yīng)該只和一個(gè)界限上下文有關(guān)乏矾。比如訂單這個(gè)實(shí)體,那么創(chuàng)建這個(gè)訂單,更新這個(gè)訂單的狀態(tài)钻心,更新這個(gè)訂單的信息等等操作應(yīng)該都是一個(gè)限界上下文來(lái)操作(訂單或交易中心)負(fù)責(zé)凄硼,界限上下文是為相應(yīng)的實(shí)體對(duì)象而存在的。
在這個(gè)限界上下文中捷沸,我們擁有了實(shí)體摊沉,但實(shí)體一定有對(duì)應(yīng)的變化場(chǎng)景:更新,狀態(tài)變化痒给,信息更新说墨,刪除等等,那么對(duì)應(yīng)的這些變化一定有對(duì)應(yīng)的命令來(lái)觸發(fā)苍柏。只是這個(gè)命令不是一個(gè)技術(shù)名詞尼斧,而是一個(gè)業(yè)務(wù)動(dòng)作而已,所以命令是伴隨者實(shí)體而生的试吁。
當(dāng)我們搞清楚了實(shí)體(由對(duì)應(yīng)的限界上下文維護(hù)生命周期和屬性更新)突颊,那么我們就可以開(kāi)始通過(guò)用例分析來(lái)歸類(lèi)相應(yīng)的界限上下文的應(yīng)具有的功能接口清單,從基于前面已經(jīng)有的用例分析潘悼,我們可以找到其中的有關(guān)實(shí)體和對(duì)應(yīng)的命令:比如上面的對(duì)賬批次,損益單爬橡,對(duì)賬文件等等治唤;相關(guān)的命令有:審核,生成糙申,調(diào)整宾添,錄入等等。
通過(guò)以上的分析柜裸,我們大概可以形成這樣的一個(gè)具備可讀性(業(yè)務(wù)人員缕陕,產(chǎn)品人員,技術(shù)人員)文檔
而且將所有限界上下文用例文檔合并起來(lái)疙挺,應(yīng)該是包含了該系統(tǒng)的所有的用例的扛邑。
這個(gè)表中的的一項(xiàng)“輸出事件”是由技術(shù)和業(yè)務(wù) 來(lái)擬定(后續(xù)會(huì)再領(lǐng)出來(lái)講),主要是通知其他上下文告知已經(jīng)完成了某個(gè)動(dòng)作铐然,做為其觸發(fā)的依據(jù)蔬崩。此文檔一定是所有的參與人員都能讀懂的。