1.引言
我們還是先來(lái)拆詞理解肖卧,領(lǐng)域模型可以拆為“領(lǐng)域”和“模型”二詞谤逼。
- 領(lǐng)域:按照我們之前的文章的理解,DDD中的領(lǐng)域是指軟件系統(tǒng)要解決的問(wèn)題,如我們的辦公設(shè)備公眾號(hào)在線商城就是為了解決電商問(wèn)題袱巨,對(duì)應(yīng)的就是電商領(lǐng)域祥国。
- 模型:百度百科解釋為對(duì)于某個(gè)實(shí)際問(wèn)題或客觀事物昵观、規(guī)律進(jìn)行抽象后的一種形式化表達(dá)方式。如戶(hù)型圖就是實(shí)際房屋結(jié)構(gòu)的模型舌稀。
把兩個(gè)詞結(jié)合起來(lái)啊犬,我們給領(lǐng)域模型下個(gè)定義:領(lǐng)域模型是對(duì)我們軟件系統(tǒng)中要解決問(wèn)題的抽象表達(dá)。
這個(gè)理解還是很生澀壁查,沒(méi)關(guān)系觉至,容我娓娓道來(lái)。
2.領(lǐng)域模型的來(lái)歷和作用
我們知道睡腿,軟件開(kāi)發(fā)過(guò)程主要包括:需求分析语御、概要設(shè)計(jì)峻贮、詳細(xì)設(shè)計(jì)、編碼应闯、測(cè)試纤控、軟件交付、驗(yàn)收碉纺、維護(hù)嚼黔。其實(shí)簡(jiǎn)單來(lái)說(shuō)就是分析、設(shè)計(jì)和實(shí)現(xiàn)惜辑。
而傳統(tǒng)的軟件開(kāi)發(fā)方式中唬涧,系統(tǒng)分析、設(shè)計(jì)和實(shí)現(xiàn)三個(gè)階段完全脫節(jié)盛撑,最后開(kāi)發(fā)出來(lái)的軟件不能很好的滿(mǎn)足業(yè)務(wù)需求碎节,在未來(lái)也不能很好的適應(yīng)需求變化進(jìn)行功能演進(jìn)。
那在DDD中是如何做到呢抵卫,下面我們就從以下幾個(gè)問(wèn)題來(lái)分析說(shuō)明狮荔。
- 怎樣確保最終的軟件設(shè)計(jì)能滿(mǎn)足客戶(hù)需求且適應(yīng)變化?
那就要保證系統(tǒng)分析介粘、設(shè)計(jì)和實(shí)現(xiàn)不脫節(jié)殖氏。 - 那如何做到不脫節(jié)呢?
如果按照我的理解姻采,那就需要有某一個(gè)東西能貫穿整個(gè)開(kāi)發(fā)流程雅采,來(lái)銜接分析、設(shè)計(jì)和實(shí)現(xiàn)三個(gè)階段慨亲。 - 那這個(gè)東西是什么呢婚瓜?
聰明如你,是的刑棵,就是我們今天的主題——領(lǐng)域模型巴刻。 - 那領(lǐng)域模型是如何做到的呢?
在分析階段蛉签,所有的參與人員(領(lǐng)域?qū)<液恪⒃O(shè)計(jì)人員、開(kāi)發(fā)人員等)對(duì)業(yè)務(wù)進(jìn)行需求分析碍舍,通過(guò)大家的不斷交流討論柠座,提取出業(yè)務(wù)規(guī)則和流程中的關(guān)鍵詞匯和概念形成通用語(yǔ)言,進(jìn)而發(fā)現(xiàn)領(lǐng)域概念乒验,隨著大家對(duì)領(lǐng)域的認(rèn)識(shí)不斷深入愚隧,通用語(yǔ)言的詞匯也會(huì)不斷豐富和精準(zhǔn)蒂阱,從而確保了業(yè)務(wù)需求的正確表達(dá)锻全。
在設(shè)計(jì)階段狂塘,以通用語(yǔ)言為交流基礎(chǔ),將發(fā)掘的領(lǐng)域概念進(jìn)行領(lǐng)域模型設(shè)計(jì)鳄厌,以面向?qū)ο蟮乃枷氤橄蟪鰧?shí)體荞胡,確定實(shí)體所對(duì)應(yīng)的方法和屬性,以及實(shí)體之間的關(guān)系了嚎。然后將這些實(shí)體和實(shí)體之間的關(guān)系以某種形式展現(xiàn)出來(lái)泪漂,形成領(lǐng)域模型。
在實(shí)現(xiàn)階段歪泳,開(kāi)發(fā)人員根據(jù)確立的領(lǐng)域模型進(jìn)行代碼實(shí)現(xiàn)萝勤,做到代碼與模型的綁定,從而實(shí)現(xiàn)了設(shè)計(jì)和實(shí)現(xiàn)階段的銜接呐伞。
通過(guò)這樣一種方式敌卓,我們實(shí)現(xiàn)了語(yǔ)言、模型伶氢、代碼三者緊密綁定趟径,確保開(kāi)發(fā)出來(lái)的軟件來(lái)準(zhǔn)確反應(yīng)需求并能適應(yīng)變化。
通過(guò)上面對(duì)領(lǐng)域模型的來(lái)歷和作用的介紹癣防,我們對(duì)領(lǐng)域模型就有了一個(gè)大致的印象蜗巧。
3.案例分析
按照上面的理解,領(lǐng)域模型無(wú)非就是綜合了系統(tǒng)分析和設(shè)計(jì)的產(chǎn)物蕾盯,而這個(gè)產(chǎn)物我們正好可以通過(guò)UML來(lái)展示幕屹,下面我們就結(jié)合辦公設(shè)備微信公眾號(hào)在線商城案例,簡(jiǎn)單對(duì)銷(xiāo)售子域進(jìn)行領(lǐng)域模型設(shè)計(jì)级遭。
從該銷(xiāo)售子域的UML類(lèi)圖中香嗓,我們可以看出它包含了銷(xiāo)售子域涉及到相關(guān)實(shí)體以及實(shí)體之間的關(guān)系。只要看到這個(gè)類(lèi)圖装畅,我們就知道它涉及的相關(guān)概念和流程靠娱。所以說(shuō)上面這張UML類(lèi)圖是銷(xiāo)售子域的領(lǐng)域模型也不為過(guò)。
4.總結(jié)
領(lǐng)域反應(yīng)的是我們業(yè)務(wù)上需要解決的問(wèn)題掠兄,模型是我們針對(duì)該問(wèn)題提出的解決方案像云。
綜合來(lái)說(shuō),領(lǐng)域模型就是用來(lái)描述我們正在解決的問(wèn)題和提出的解決方案蚂夕。
領(lǐng)域模型按照我個(gè)人的理解迅诬,就是將業(yè)務(wù)中涉及到的概念以面向?qū)ο蟮乃枷脒M(jìn)行抽象,抽象出實(shí)體對(duì)象婿牍,確定實(shí)體所對(duì)應(yīng)的方法和屬性侈贷,以及實(shí)體之間的關(guān)系。然后將這些實(shí)體和實(shí)體之間的關(guān)系以某種形式(比如UML等脂、圖形俏蛮、代碼撑蚌、文字描述等)展現(xiàn)出來(lái)。
以上只是領(lǐng)域模型理論上的理解搏屑,但領(lǐng)域模型的設(shè)計(jì)(領(lǐng)域建模)卻是另一個(gè)復(fù)雜的話題争涌,擇日再聊。
參考資料:
領(lǐng)域模型辣恋,你真的理解的了嗎亮垫?
DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)基本理論知識(shí)總結(jié)
What is the Domain Model in Domain Driven Design? | Culttt