DDD理論學(xué)習(xí)系列(3)-- 限界上下文
1. 引言
限界上下文可以拆分為兩個(gè)詞,限界和上下文。
限界:是指一個(gè)界限,具體的某一個(gè)范圍。
上下文:個(gè)人理解就是語(yǔ)境。
比如我們常說(shuō)的段子:
“我想靜靜。”
這個(gè)句子一般是想表達(dá)“我想靜一靜”的意思。但是我們卻把它玩笑成“靜靜是誰(shuí)?”。
可見(jiàn)上下文語(yǔ)境很重要。
這個(gè)例子只是個(gè)開(kāi)胃菜,我們接著往下看。
2. 案例分析
整個(gè)應(yīng)用程序之內(nèi)的一個(gè)概念性邊界。
邊界之內(nèi)的每種領(lǐng)域術(shù)語(yǔ)、詞組或句子--也即通用語(yǔ)言,都有確定的上下文含義。
邊界之外,這些術(shù)語(yǔ)可能表示不同的意思。
每次看到這種解釋就頭大。我們還是結(jié)合我們的案例來(lái)聊一聊吧。
根據(jù)上一節(jié)對(duì)領(lǐng)域的剖析,我們把案例主要拆分成幾個(gè)子域,其中銷(xiāo)售子域是核心域,商品子域和物流子域?yàn)橹巫佑颉T谶@三個(gè)子域中,都要和商品打交道。如果把商品抽象為Product對(duì)象的話,按我們一般的常規(guī)思路(拋開(kāi)子域的劃分)來(lái)說(shuō),不管是商品銷(xiāo)售還是發(fā)貨,我們都可以共用同一個(gè)Product對(duì)象。
但在DDD中,在商品子域和銷(xiāo)售子域中,可以共享這個(gè)Product對(duì)象,但在物流子域,就有點(diǎn)大材小用。為什么呢?因?yàn)楫吘刮锪髯佑蜿P(guān)注的是商品的發(fā)貨處理和物流跟蹤。針對(duì)發(fā)貨流程而言,我只關(guān)心商品的數(shù)量、大小、重量等規(guī)格,而不必了解商品的價(jià)格等其他信息。所以說(shuō)物流子域應(yīng)該關(guān)注的是貨物的發(fā)貨處理而不是商品。
那為什么我們之前的開(kāi)發(fā)思路會(huì)共用同一個(gè)Product對(duì)象呢?
答案很簡(jiǎn)單,沒(méi)有進(jìn)行領(lǐng)域的劃分。把整個(gè)項(xiàng)目一概而論,統(tǒng)一建模導(dǎo)致的結(jié)果。
在DDD的思想下,當(dāng)劃分子域之后,每個(gè)子域都對(duì)應(yīng)有各自的上下文。在銷(xiāo)售子域和商品子域所在的上下文語(yǔ)境中,商品就是商品,無(wú)二義性。在物流子域的上下文語(yǔ)境中,我們也可以說(shuō)商品的發(fā)貨處理,但這時(shí)的商品就特指貨物了。確定了真實(shí)面目之后,我想我們也會(huì)不由自主的抽象一個(gè)新的Cargo對(duì)象來(lái)處理物流相關(guān)的業(yè)務(wù)。這也是DDD帶來(lái)的好處,讓我們更清晰的建模。
3. 限界上下文的命名
限界上下文只是一個(gè)統(tǒng)一的命名,在我們劃分子域后,每個(gè)子域一般對(duì)應(yīng)一個(gè)上下文,也可以對(duì)應(yīng)多個(gè)上下文。但如果子域?qū)?yīng)多個(gè)上下文的時(shí)候,就要考慮一下是不是子域能否繼續(xù)劃分。
命名方式很簡(jiǎn)單,領(lǐng)域名+上下文。
比如我們的銷(xiāo)售子域?qū)?yīng)銷(xiāo)售上下文,物流子域?qū)?yīng)物流上下文。
4. 總結(jié)
通過(guò)我們上面的舉例分析,限界上下文也并不是一個(gè)高深的概念。
用官話來(lái)說(shuō)限界上下文主要用來(lái)封裝通用語(yǔ)言和領(lǐng)域?qū)ο蟆?br>
按我個(gè)人的理解它就是用來(lái)為領(lǐng)域提供上下文語(yǔ)境,保證在領(lǐng)域之內(nèi)的一些術(shù)語(yǔ)、業(yè)務(wù)相關(guān)對(duì)象等(通用語(yǔ)言)有一個(gè)確切的含義,沒(méi)有二義性。
推薦鏈接:你必須知道的ML.NET開(kāi)發(fā)指南
推薦鏈接:你必須知道的Office開(kāi)發(fā)指南
推薦鏈接:你必須知道的IOT開(kāi)發(fā)指南
推薦鏈接:你必須知道的Azure基礎(chǔ)知識(shí)
推薦鏈接:你必須知道的PowerBI基礎(chǔ)知識(shí)
關(guān)注我的公眾號(hào)『微服務(wù)知多少』,我們微信不見(jiàn)不散。
閱罷此文,如果您覺(jué)得本文不錯(cuò)并有所收獲,請(qǐng)【打賞】或【推薦】,也可【評(píng)論】留下您的問(wèn)題或建議與我交流。 你的支持是我不斷創(chuàng)作和分享的不竭動(dòng)力!

浙公網(wǎng)安備 33010602011771號(hào)