領(lǐng)域這個詞語承載了太多的含義异希,既可以表示整個業(yè)務(wù)系統(tǒng)幽邓,也可以表示其中的某個核心域或者支持子域呜笑。
賬戶域可以分為:權(quán)限子域和用戶信息域(子域下面還可以再接在劃分出子域,沒有最小的子域顷锰,只有最合適的子域)。
權(quán)限子域又可以分為:認(rèn)證上下文和授權(quán)上下文亡问。對于限定上下文官紫,我們把重點放在界限上。
比如州藕,“顧客”這個術(shù)語可能有多種含義束世。在瀏覽產(chǎn)品目錄的時候,“顧客”表示一種意思床玻;而在下單的時候良狈,“顧客”又表示另一種意思。原因在于:當(dāng)瀏覽產(chǎn)品目錄時笨枯,“顧客”被放在了先前購買情況薪丁、忠誠度、可買產(chǎn)品馅精、折扣和物流方式這樣的上下文中严嗜。而在下單時,“顧客”的上下文包括名字洲敢、產(chǎn)品寄送地址漫玄、訂單總價和一些付款術(shù)語。
1. 事件風(fēng)暴
在領(lǐng)域建模過程中压彭,我們需要關(guān)注這類業(yè)務(wù)語言和行為睦优。比如某個業(yè)務(wù)動作或者行為(事件)是否會觸發(fā)下一個業(yè)務(wù)動作?這個動作(事件)的輸入和輸出是什么壮不?是誰(實體)發(fā)出的什么行為(命令)汗盘,觸發(fā)了這個動作(事件)...我們可以從這些暗藏的詞匯中,分析出領(lǐng)域模型的事件询一、命令和實體等領(lǐng)域?qū)ο蟆?/p>
權(quán)限域有三個典型的業(yè)務(wù)場景:
- 資源和角色設(shè)置隐孽;
- 用戶分配角色癌椿,創(chuàng)建賬戶和密碼;
- 用戶登錄系統(tǒng)和權(quán)限系統(tǒng)菱阵,生成用戶登錄和操作日志踢俄;
我們可以按照業(yè)務(wù)流程,進(jìn)行場景分析:
- 搜尋用戶業(yè)務(wù)流程中的關(guān)鍵領(lǐng)域事件晴及,比如資源創(chuàng)建都办,角色創(chuàng)建,用戶創(chuàng)建等事件虑稼。
- 再找出什么行為會引起這些領(lǐng)域事件脆丁,這些行為可能是一個或若干命令組合在一起的。
- 領(lǐng)域事件會觸發(fā)下一步的操作动雹,比如發(fā)布到郵件系統(tǒng)通知用戶創(chuàng)建槽卫;
場景分析時會產(chǎn)生很多命令和領(lǐng)域事件:
2. 領(lǐng)域建模
領(lǐng)域建模時,我們會根據(jù)場景分析過程中產(chǎn)生的領(lǐng)域?qū)ο笠闰穑热缑罴吲唷⑹录戎g的關(guān)系,找出產(chǎn)生命令的實體茸塞,分析實體之間的依賴關(guān)系組成聚合躲庄,為聚合劃定限定上下文,建立領(lǐng)域模型與領(lǐng)域之間的依賴钾虐。領(lǐng)域模型利用限定上下文向上可以指導(dǎo)微服務(wù)設(shè)計噪窘,通過向下可以指導(dǎo)聚合根、實體和值對象的設(shè)計效扫。
2.1 提取實體
從命令和事件中提取產(chǎn)生這些行為的實體倔监。用綠色貼紙表示實體。通過分析權(quán)限模塊的命令和事件等行為數(shù)據(jù)菌仁,提取了產(chǎn)生這些行為的用戶浩习、賬戶、認(rèn)證Token济丘、資源谱秽、菜單、角色和用戶日志七個實體摹迷。
2.2 劃分聚合
將實體劃分成聚合疟赊,這上面的7個實體都可以獨自作為一個聚合。
2.3 劃分限定上下文
劃定限界上下文异赫,根據(jù)上下文語義將聚合歸類椅挣。根據(jù)用戶域的上下文語境,
- 用戶基本信息和用戶日志信息這兩個聚合共同構(gòu)成用戶信息域塔拳,分別管理用戶基本信息鼠证、用戶登錄和操作日志。
- 認(rèn)證Token和賬戶這兩個聚合共同構(gòu)成認(rèn)證域靠抑,分別實現(xiàn)不同方式的登錄和認(rèn)證量九。
- 資源、角色颂碧、菜單共同構(gòu)成了權(quán)限域荠列。
2.4 轉(zhuǎn)化為領(lǐng)域模型圖
將上面的圖轉(zhuǎn)化為技術(shù)人員可以理解的領(lǐng)域模型圖。