界限上下文是<<實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)>>中提到的一個(gè)重要概念,花了一些時(shí)間才有了進(jìn)一步的了解,書中提到
界限上下文是一個(gè)顯式邊界.在邊界內(nèi),通用語(yǔ)言中的所有術(shù)語(yǔ)和詞組都有特定的含義,而模型需要準(zhǔn)確地反映通用語(yǔ)言.
這里提到的"顯式邊界"可以理解為一個(gè)語(yǔ)境,其實(shí)我們說(shuō)的每一句話都是在特定語(yǔ)境之下,并且特定語(yǔ)境下的每個(gè)詞都是有唯一解釋的,有共同的語(yǔ)境,人與人之間才能正常的交流,就好比和不同專業(yè)的人交流,也許他說(shuō)的每個(gè)詞都明白,但因?yàn)檎Z(yǔ)境不一樣,也不能聽(tīng)懂他在說(shuō)什么.還有上學(xué)時(shí)做英語(yǔ)閱讀理解,雖然每個(gè)單詞都認(rèn)識(shí),但依然不能夠理解文中表達(dá)的含義,就是缺少對(duì)語(yǔ)境的了解.書中也也提到了賬戶的例子,
在銀行上下文和文學(xué)上下文中都有賬戶這個(gè)概念,雖然叫法一樣,但含義卻隨著上下文的不同而不同,所以上下文劃分的有問(wèn)題,就會(huì)影響人們對(duì)問(wèn)題的描述,有問(wèn)題的描述自然會(huì)轉(zhuǎn)化為有問(wèn)題的程序,在軟件設(shè)計(jì)之初,對(duì)上下文的劃分是至關(guān)重要的,也是軟件戰(zhàn)略設(shè)計(jì)的重要組成.書中也提到了正確劃分上下文的必要性,
正確劃分軟件的界限上下文是重要的,但是如何正確的劃分,書中沒(méi)有明確表述,因?yàn)檫@是與業(yè)務(wù)密切相關(guān),不過(guò)可以確定的是只有在深度理解業(yè)務(wù)的情況下才能正確劃分,當(dāng)然最好有領(lǐng)域?qū)<夷軌騾f(xié)助劃分.
在進(jìn)一步對(duì)界限上下文進(jìn)行抽象,可以把界限上下文理解為一個(gè)世界,世界里面涵蓋自然法則,知識(shí),問(wèn)題等等一切,可以映射到軟件設(shè)計(jì)中的業(yè)務(wù)規(guī)則,業(yè)務(wù)知識(shí),需求等,在這個(gè)世界里面解決問(wèn)題的思路的就是代碼的設(shè)計(jì)思路.
舉個(gè)常用的用例
1)顧客攜帶商品到收銀臺(tái);
2)收銀員掃描商品條形碼;
3)系統(tǒng)根據(jù)條形碼獲取并顯示商品信息先誉;
4)收銀員重復(fù)2~3步掠廓,直到所有商品掃描完畢逆甜;
5)系統(tǒng)計(jì)算商品總額;
津坑。。。浩考。。被盈。析孽。。只怎。袜瞬。。身堡。邓尤。。贴谎。汞扎。。擅这。澈魄。。
n)系統(tǒng)打出商品清單仲翎,完成交易痹扇。
這個(gè)例子位于超市界限上下文,該上下文中了包含了超市交易的相關(guān)的知識(shí),例如這個(gè)世界的參與者顧客,商品,收銀員等等;業(yè)務(wù)流程(用例本身);業(yè)務(wù)規(guī)則等.
我們可依根據(jù)這些知識(shí)進(jìn)行進(jìn)行軟件設(shè)計(jì),
上圖是一個(gè)不完整的UML設(shè)計(jì),涵蓋了商品交易上下文中一些重要的實(shí)體,業(yè)務(wù)流程就是對(duì)這些實(shí)體行為的編排.
再進(jìn)一步對(duì)商品這個(gè)實(shí)體進(jìn)行分析,它有一個(gè)重要的行為是根據(jù)條形碼獲取商品信息,簡(jiǎn)單的實(shí)現(xiàn)可能是從數(shù)據(jù)庫(kù)獲取商品信息,所以商品這個(gè)實(shí)體也構(gòu)成一個(gè)上下文,在這個(gè)上下文包含了與商品交易上下文完全不同的知識(shí),例如數(shù)據(jù)訪問(wèn)這個(gè)概念,ORM相關(guān)的概念,也有著自己的業(yè)務(wù)規(guī)則,例如同一個(gè)條形碼只能對(duì)應(yīng)一種商品等.
如上圖所示,每個(gè)上下文都代表著一個(gè)世界,都有著符合本世界體系的知識(shí)和概念,商品交易上下文包含了商品,交易等概念,商品上下文包含了數(shù)據(jù)訪問(wèn),商品信息等概念,數(shù)據(jù)訪問(wèn)上下文中包含了數(shù)據(jù)庫(kù)鏈接,訪問(wèn),連接池等概念.即使有些概念的叫法看起來(lái)一致,例如商品交易上下文中和商品上下文中的商品信息概念,前者的信息是用于呈獻(xiàn)給用戶的,而后者是數(shù)據(jù)庫(kù)中商品信息表中的一個(gè)映射,兩者的本質(zhì)是有區(qū)別的,而且都必須在各自的上下文中才能有明確的解釋.
如上圖所示,軟件是可以由不同的上下文嵌套而成,如同我們的世界是由不同的世界嵌套構(gòu)成,所以世界即上下文,上下文即世界,應(yīng)了佛經(jīng)上的那句"須彌藏芥子铛漓,芥子納須彌",一切皆世界,世界皆一切.