領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)與微服務(wù)

責(zé)任編輯:editor006

作者: Mikael Zandin

2016-04-26 16:22:10

摘自:INFOQ

在QCon倫敦2016大會(huì)上,《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》一書的作者Eric Evans提出,使用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)概念減少微服務(wù)環(huán)境中通用語(yǔ)言的復(fù)雜性。

在QCon倫敦2016大會(huì)上,《領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)》一書的作者Eric Evans提出,使用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)概念減少微服務(wù)環(huán)境中通用語(yǔ)言的復(fù)雜性。

團(tuán)隊(duì)使用不同的通用語(yǔ)言給管理微服務(wù)環(huán)境帶來(lái)了特殊的問(wèn)題。團(tuán)隊(duì)會(huì)開(kāi)發(fā)自己的通用語(yǔ)言,并在自己的領(lǐng)域范圍內(nèi)賦予它們意義。然而,這些通用語(yǔ)言的概念在團(tuán)隊(duì)的語(yǔ)境之外并未保持一致。一個(gè)團(tuán)隊(duì)對(duì)“客戶”的定義可能與另一個(gè)團(tuán)隊(duì)的定義存在明顯的差別,導(dǎo)致了不必要的復(fù)雜性。此外,每一種語(yǔ)言都會(huì)在各自的團(tuán)隊(duì)內(nèi)發(fā)展演變,幾乎可以確定早晚會(huì)出現(xiàn)迥然不同的定義。

Evans談到,團(tuán)隊(duì)會(huì)犯編碼錯(cuò)誤及誤解需求,導(dǎo)致錯(cuò)誤和糟糕的代碼。雖然這時(shí)有發(fā)生,但最壞的情況是這些錯(cuò)誤滲透到了其他不相關(guān)的微服務(wù)中。Evans區(qū)分了他所謂的“小泥球”和“大泥球”,前者是指問(wèn)題包含在一個(gè)微服務(wù)中,后者是指一個(gè)微服務(wù)中的問(wèn)題擴(kuò)散到整個(gè)環(huán)境。

Evans介紹了三種可以幫助管理微服務(wù)環(huán)境的DDD工具:上下文映射、“防腐層(anti-corruption layer,ACL)”和“交流語(yǔ)境(interchange context)”。上下文映射代表微服務(wù)間的通信路徑,暗含了微服務(wù)團(tuán)隊(duì)之間的適當(dāng)交互。一旦這種分析成熟,團(tuán)隊(duì)就可以選擇依賴不同團(tuán)隊(duì)的領(lǐng)域語(yǔ)言,在這種情況下,ACL可能就有意義了。ACL的職責(zé)是將外部概念翻譯成內(nèi)部模型,從而實(shí)現(xiàn)領(lǐng)域間的松耦合。在兩個(gè)團(tuán)隊(duì)需要更多合作的情況下,交流語(yǔ)境可能更有意義。交流語(yǔ)境比ACL更完善,它提供了一個(gè)層,供兩個(gè)團(tuán)隊(duì)討論詞匯意思,并來(lái)回翻譯微服務(wù)語(yǔ)言。

將代碼從單體應(yīng)用移植到一個(gè)微服務(wù)系統(tǒng)會(huì)把上下文復(fù)雜性從代碼轉(zhuǎn)移到微服務(wù)之間的空間。微服務(wù)之間的交互現(xiàn)在包含了邏輯,這些邏輯以前存在于易于閱讀和調(diào)試的代碼中。這種新的上下文必須妥善管理,否則整個(gè)系統(tǒng)就會(huì)發(fā)展成為Evans所說(shuō)的“大泥球”。

Evans建議,將每個(gè)微服務(wù)設(shè)計(jì)成一個(gè)DDD有界上下文。這為系統(tǒng)內(nèi)的微服務(wù)提供了一個(gè)邏輯邊界,無(wú)論是功能,還是通用語(yǔ)言。每個(gè)獨(dú)立的團(tuán)隊(duì)負(fù)責(zé)一個(gè)邏輯上定義好的系統(tǒng)切片。最終,團(tuán)隊(duì)開(kāi)發(fā)出的代碼會(huì)更易于理解和維護(hù)。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)