新聞中心
在軟件構(gòu)造過(guò)程中,我們必須正確地理解領(lǐng)域。一種生動(dòng)的方式是通過(guò)“場(chǎng)景”來(lái)展現(xiàn)領(lǐng)域邏輯。領(lǐng)域?qū)<一驑I(yè)務(wù)分析師從領(lǐng)域中提煉出“場(chǎng)景”,就好像是從抽象的三維球體中,切割出具體可見(jiàn)的一片。然后以這一片場(chǎng)景為舞臺(tái),上演各種角色之間的悲歡離合。每個(gè)角色的行為皆在業(yè)務(wù)流程的指引下展開(kāi)活動(dòng),并受到業(yè)務(wù)規(guī)則的約束。當(dāng)我們?cè)诿枋鰣?chǎng)景時(shí),就好像在講故事,又好似在拍電影。

組成場(chǎng)景的要素常常被稱(chēng)之為6W模型,即描寫(xiě)場(chǎng)景的過(guò)程必須包含Who,What,Why,Where,When與hoW這六個(gè)要素。6W模型如下圖所示:
通過(guò)場(chǎng)景分析領(lǐng)域需求時(shí),我們需要首先識(shí)別參與該場(chǎng)景的用戶角色。我們可以為其建立用戶畫(huà)像(Persona),通過(guò)分析該用戶的特征與屬性辨別該角色在整個(gè)場(chǎng)景中參與的活動(dòng)。這意味著我們需要明確業(yè)務(wù)功能(what),思考這一功能給該角色能夠帶來(lái)什么樣的業(yè)務(wù)價(jià)值(why)。注意,這里所謂的“角色”是參差多態(tài)的,同一個(gè)用戶在不同場(chǎng)景可能是完全不同的角色。例如在電商系統(tǒng)中,倘若執(zhí)行的是下訂單功能,則角色就是買(mǎi)家;針對(duì)該訂單發(fā)表評(píng)論,參與的角色就變成了評(píng)論者。
在6W模型中,我將領(lǐng)域功能劃分為三個(gè)層次,即業(yè)務(wù)價(jià)值、業(yè)務(wù)功能和業(yè)務(wù)實(shí)現(xiàn),我將其稱(chēng)之為“職責(zé)的層次”。定義為“職責(zé)(Responsibility)”,才能夠更好地體現(xiàn)它與角色之間的關(guān)系,即“角色履行了職責(zé)”。業(yè)務(wù)價(jià)值體現(xiàn)了職責(zé)存在的目的,即解釋了該領(lǐng)域需求的Why。只有提供了該職責(zé),這個(gè)場(chǎng)景對(duì)于參與角色才是有價(jià)值的。為了滿足業(yè)務(wù)價(jià)值,我們可以進(jìn)一步剖析為了實(shí)現(xiàn)該價(jià)值需要哪些支撐功能,這些業(yè)務(wù)功能對(duì)應(yīng)6W模型中的What。進(jìn)一步,我們對(duì)功能深入分析,就可以分析獲得具體的業(yè)務(wù)實(shí)現(xiàn)。業(yè)務(wù)實(shí)現(xiàn)關(guān)注于如何去實(shí)現(xiàn)該業(yè)務(wù)價(jià)值,因而對(duì)應(yīng)于hoW。
在電商系統(tǒng)中購(gòu)買(mǎi)商品時(shí),對(duì)于買(mǎi)家而言,下訂單這一職責(zé)是具有業(yè)務(wù)價(jià)值的。通過(guò)領(lǐng)域分析,結(jié)合職責(zé)的層次概念,我們就可以得到如下的職責(zé)分層結(jié)構(gòu):
下訂單
- 驗(yàn)證訂單是否有效
- 驗(yàn)證訂單是否為空
- 驗(yàn)證訂單信息是否完整
- 驗(yàn)證訂單當(dāng)前狀態(tài)是否處于“待提交”狀態(tài)
- 驗(yàn)證訂單提交者是否為合法用戶
- 驗(yàn)證商品庫(kù)存量是否大于等于訂單中的數(shù)量
基于業(yè)務(wù)規(guī)則計(jì)算訂單總價(jià)、優(yōu)惠與配送費(fèi)
- 獲取用戶信息
- 獲取當(dāng)前促銷(xiāo)規(guī)則
- 計(jì)算訂單總價(jià)
- 計(jì)算訂單優(yōu)惠
- 計(jì)算商品配送費(fèi)
提交訂單
- 將訂單項(xiàng)插入到數(shù)據(jù)表中
- 將訂單插入到數(shù)據(jù)表中
- 更新訂單狀態(tài)為“待付款”
更新購(gòu)物車(chē)
- 刪除購(gòu)物車(chē)中對(duì)應(yīng)的商品
發(fā)送通知
- 給買(mǎi)家發(fā)送電子郵件,通知訂單提交成功,等待付款
當(dāng)我們獲得這樣的職責(zé)層次結(jié)構(gòu)之后,就可以幫助我們更加細(xì)致地針對(duì)領(lǐng)域進(jìn)行建模。在利用場(chǎng)景進(jìn)行建模時(shí),還要充分考慮場(chǎng)景的邊界,即6W模型中的Where。例如在“下訂單”的案例中,驗(yàn)證商品庫(kù)存量的業(yè)務(wù)實(shí)現(xiàn)需要調(diào)用庫(kù)存提供的接口,而該功能實(shí)則屬于下訂單場(chǎng)景的邊界之外。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)引入了限界上下文(Bounded Context)來(lái)解決這一問(wèn)題。
針對(duì)問(wèn)題域提煉領(lǐng)域知識(shí)是一個(gè)空泛的概念,業(yè)務(wù)場(chǎng)景分析的6W模型給出了具有指導(dǎo)意義的約束,要求我們提煉的領(lǐng)域知識(shí)必須具備模型的六個(gè)要素。這就好比兩位侃侃而談的交談?wù)?,因?yàn)橛辛舜_定的主題與話題邊界,一場(chǎng)本來(lái)是漫無(wú)目的野鶴閑云似的閑聊就變成了一次深度交流的專(zhuān)題高端對(duì)話。6W模型也是對(duì)領(lǐng)域邏輯的一種檢驗(yàn),如果提煉出來(lái)的領(lǐng)域邏輯缺乏部分要素,就有可能忽略一些重要的領(lǐng)域概念、規(guī)則與約束。這種缺失會(huì)對(duì)后續(xù)的領(lǐng)域建模直接產(chǎn)生影響。正本清源,按照領(lǐng)域場(chǎng)景分析的6W模型去分析領(lǐng)域邏輯,提煉領(lǐng)域知識(shí),可以從一開(kāi)始在一定程度上保證領(lǐng)域模型的完整性。
【本文為專(zhuān)欄作者“張逸”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】
戳這里,看該作者更多好文
當(dāng)前標(biāo)題:領(lǐng)域場(chǎng)景分析的6W模型
瀏覽路徑:http://fisionsoft.com.cn/article/cosjehc.html


咨詢
建站咨詢
