在上一篇中,介紹了領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的目的,組成的基本單元。剩下的部分,介紹執(zhí)行過程中的注意事項(xiàng)。包括重構(gòu)的作用和操作步驟,以及如何在不同環(huán)境下,仍然保持模型一致性。
重構(gòu)普遍存在于所有軟件開發(fā)過程。有一些自動(dòng)化的方法來支持重構(gòu),這些方法更加關(guān)注于代碼本身。但是ddd中的重構(gòu)概念側(cè)重于領(lǐng)域關(guān)系,會(huì)產(chǎn)生一個(gè)更深層次去理解領(lǐng)域關(guān)系的結(jié)果導(dǎo)向。為了不產(chǎn)生更多偏差,可以使用“隱式概念顯示化”,“規(guī)約”,“過程”,“約束”來保證大家對(duì)整個(gè)項(xiàng)目理解的一致性。
前面提到為了減少溝通gap,在多個(gè)團(tuán)隊(duì)合作時(shí),是采用通用語言或者說模型來進(jìn)行交流的。對(duì)模型一致性的要求,會(huì)貫穿于整個(gè)開發(fā)周期。不論是正常開發(fā)構(gòu)成還是重構(gòu),ddd提出,可以通過下面的方案來保證模型一致性
1.界定上下文。這個(gè)概念類似微服務(wù)中的schema定義。工作量在于需要定義多個(gè)模型的上下文。好處是當(dāng)確定了模型的上下文之后,各個(gè)模型的負(fù)責(zé)人將各司其職
2.持續(xù)集成。由于會(huì)不停的進(jìn)行迭代或者重構(gòu),通過持續(xù)集成能夠保證整個(gè)項(xiàng)目的質(zhì)量,理論上測(cè)試集足夠充分時(shí),任何錯(cuò)誤都可以被檢測(cè)出來。開發(fā)人員可以將更多精力放在新的功能中。
3.上下文映射。這個(gè)給出了模型中各個(gè)上下文彼此之間的關(guān)系,目的是讓每個(gè)工作人員都能夠理解整體。
4.共享內(nèi)核。兩個(gè)團(tuán)隊(duì)之間通過共享內(nèi)核,來減少重復(fù)開發(fā)的工作
5.客戶-供應(yīng)商。當(dāng)A系統(tǒng)依賴于B系統(tǒng)時(shí),且B也尊重A的需求,那么A-B就是一個(gè)客戶-供應(yīng)商的關(guān)系。由于客戶-供應(yīng)商之間有一個(gè)良好定義的接口,B可以自由更改自己的內(nèi)部實(shí)現(xiàn),而不用收到A的約束
6.順從者。當(dāng)A依賴于B,同時(shí)完全不能約束B時(shí),就是順從者的模式。比如普通的網(wǎng)上沖浪者,和門戶網(wǎng)站之間的關(guān)系
7.防崩潰層??梢院?jiǎn)單理解為適配器層,位于客戶端和服務(wù)端的一層,可以簡(jiǎn)化系統(tǒng)的層級(jí)結(jié)構(gòu)
8.獨(dú)立方法。當(dāng)應(yīng)用比較簡(jiǎn)單時(shí),為了不投入過多精力去做模型一致性的保證,可以用獨(dú)立方法。也就是將當(dāng)前應(yīng)用獨(dú)立建模,不考慮與其他應(yīng)用的依賴關(guān)系,簡(jiǎn)單快速的完成應(yīng)用
9.開放主機(jī)服務(wù)。由于為一個(gè)子系統(tǒng)設(shè)計(jì)一套防崩潰層需要一定投入,當(dāng)設(shè)計(jì)n套防崩潰層時(shí)的投入可能超出負(fù)擔(dān)范疇。開放主機(jī)是指不做適配了,而是提供開放協(xié)議,由需要這套子系統(tǒng)的其他子系統(tǒng)來實(shí)現(xiàn)交互
10.精煉。模型過大時(shí),可以通過“精煉”將本質(zhì)的東西提取出來,比如找到核心域是什么,最有價(jià)值的業(yè)務(wù)是什么,投入最優(yōu)質(zhì)資源去支持。而其他普通子域可以通過外包等方式來實(shí)現(xiàn)。
以上為全書主要內(nèi)容