好的領(lǐng)域模型應(yīng)該長(zhǎng)什么樣子?
(相關(guān)資料圖)
DDD說(shuō),領(lǐng)域模型應(yīng)該是可以準(zhǔn)確表達(dá)業(yè)務(wù)需求的模型。
模型和領(lǐng)域模型是兩個(gè)概念,模型可以是數(shù)據(jù)模型或服務(wù)模型,領(lǐng)域模型是以領(lǐng)域?yàn)楹诵牡哪P?,是?duì)領(lǐng)域知識(shí)嚴(yán)格組織和抽象得來(lái)的。
?那,應(yīng)該如何描述領(lǐng)域模型呢?
是UML圖?還是編程代碼?還是一個(gè)完整的書面文檔?
這些僅僅是表達(dá)領(lǐng)域模型的一種載體,如果UML圖、編程代碼、書面文檔不能傳遞出領(lǐng)域知識(shí),那就不是領(lǐng)域模型。
一個(gè)好的領(lǐng)域模型應(yīng)該包含如下特征:
用統(tǒng)一語(yǔ)言來(lái)表達(dá)領(lǐng)域中的概念;
涵蓋了業(yè)務(wù)活動(dòng)和規(guī)則等領(lǐng)域知識(shí);
對(duì)領(lǐng)域內(nèi)的知識(shí)做了適當(dāng)?shù)奶釤捄统橄螅?/p>
建立了一個(gè)迭代演進(jìn)的過(guò)程;
有助于業(yè)務(wù)人員和技術(shù)人員的交流;
所以,我們忘記載體,關(guān)注于他如何傳遞領(lǐng)域知識(shí),并且有助于技術(shù)人員和業(yè)務(wù)人員的交流,那他就可以稱為領(lǐng)域模型。
模型設(shè)計(jì)和模型實(shí)現(xiàn)其實(shí)是兩件事情,就像在公司里面老板做戰(zhàn)略取舍,基層做戰(zhàn)術(shù)落地,在領(lǐng)域模型的設(shè)計(jì)和實(shí)現(xiàn)上應(yīng)該也分開(kāi)。
模型是作基本職責(zé)的分配,程序是模型的具體表達(dá)。
Eric Evans說(shuō):將分析、建模、設(shè)計(jì)、編程工作過(guò)度分離對(duì)模型驅(qū)動(dòng)設(shè)計(jì)會(huì)產(chǎn)生不良影響。
所以要將分析、設(shè)計(jì)、實(shí)現(xiàn)統(tǒng)一到模型設(shè)計(jì)中考量。
在分析階段,業(yè)務(wù)人員和技術(shù)人員在一起工作,建立準(zhǔn)確和簡(jiǎn)潔的分析模型,直觀傳遞不同角色對(duì)業(yè)務(wù)知識(shí)的理解。
在設(shè)計(jì)階段,基于分析模型對(duì)模型中的設(shè)計(jì)進(jìn)行改進(jìn),考慮職責(zé)的合理分配和協(xié)作,建立有指導(dǎo)意義的設(shè)計(jì)模型。
在實(shí)現(xiàn)階段,代碼忠實(shí)反映模型的設(shè)計(jì),反映出模型中的領(lǐng)域和知識(shí)。
戰(zhàn)略設(shè)計(jì)環(huán)節(jié),識(shí)別出業(yè)務(wù)場(chǎng)景下,系統(tǒng)的限界上下文。
在限界上下文中,提取語(yǔ)義相關(guān)和功能相關(guān)的用例,作為分析建模的重要輸入。
戰(zhàn)術(shù)設(shè)計(jì)環(huán)節(jié),通過(guò)用戶故事迭代,逐步對(duì)比模型進(jìn)行細(xì)化,引入設(shè)計(jì)模式,結(jié)合TDD開(kāi)發(fā)等進(jìn)行編碼實(shí)現(xiàn)。
領(lǐng)域服務(wù)應(yīng)該是一系列活動(dòng)集合,是領(lǐng)域服務(wù)下的關(guān)鍵環(huán)節(jié)。
在每個(gè)關(guān)鍵環(huán)節(jié),對(duì)于不同用戶身份,應(yīng)該有規(guī)則映射處理細(xì)節(jié),這部分規(guī)則可以有機(jī)的、結(jié)構(gòu)化的可視化出來(lái),便于溝通。
領(lǐng)域服務(wù)應(yīng)該和領(lǐng)域掛鉤,指導(dǎo)每個(gè)關(guān)鍵領(lǐng)域下應(yīng)該有的活動(dòng)有哪些。
要想實(shí)現(xiàn)這些活動(dòng)集的復(fù)用,就需要明確輸入和輸出,看得清輸入、輸出、關(guān)鍵流程才敢去復(fù)用。
總結(jié)來(lái)說(shuō),領(lǐng)域、領(lǐng)域服務(wù)、領(lǐng)域節(jié)點(diǎn)、業(yè)務(wù)身份的關(guān)鍵規(guī)則、為領(lǐng)域服務(wù)復(fù)用的輸入和輸出,都是可以被可視化和配置化起來(lái)的。
Copyright @ 2015-2022 華中晚報(bào)網(wǎng)版權(quán)所有 備案號(hào): 京ICP備12018864號(hào)-26 聯(lián)系郵箱:2 913 236 @qq.com