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