今日,網(wǎng)友LeoXu給我發(fā)了封郵件,提到了業(yè)務(wù)建模如何組織業(yè)務(wù)用例的問題。這個(gè)問題還是第一次被問到,而且Leo同學(xué)顯然走了一點(diǎn)小彎路。在回答他的同時(shí),他的這個(gè)問題也非常好,把它分享出來。另一方面,Leo同學(xué)顯然是喜歡思考的,他給我問題的同時(shí)也包含了他的許多思考,這點(diǎn)要贊之。為了表示對(duì)他熱愛思考的鼓勵(lì)和贊許,特地在最后又留了一個(gè)問題,請(qǐng)Leo同學(xué)來回答。同時(shí)也歡迎各位網(wǎng)友就該問題暢所欲言!
Leo同學(xué)的來信:
譚老師,你好.
我是<大象><wbr>的讀者,看了您的書收獲良多.在使用本書知識(shí)進(jìn)行業(yè)務(wù)建模時(shí),<wbr>遇到了讓我有些困惑的問題。描述如下:</wbr></wbr>
以我目前分析的餐飲管理系統(tǒng)為例,該系統(tǒng)的一項(xiàng)業(yè)務(wù)是,<wbr>處理顧客對(duì)餐臺(tái)的要求,包括轉(zhuǎn)臺(tái)和并臺(tái),<wbr>轉(zhuǎn)臺(tái)就是我們所說的更換餐桌,<wbr>并臺(tái)可以理解為將多個(gè)餐桌的服務(wù)及費(fèi)用和并到一個(gè)餐桌。<wbr>兩種情況因?yàn)槎及l(fā)生在客戶下單之后,<wbr>所以系統(tǒng)要及時(shí)更改服務(wù)信息,如上菜的地點(diǎn)等。<wbr>類似特征的業(yè)務(wù)還有很多。分析時(shí)我以“處理顧客要求”<wbr>的業(yè)務(wù)目標(biāo)作為邊界,因此獲取了很多業(yè)務(wù)用例。建模時(shí),<wbr>業(yè)務(wù)用例視圖中有很多用例,整個(gè)視圖顯得很零亂。<wbr>因此我想到了對(duì)用例“分類”,如上述例子,將“處理并臺(tái)要求”<wbr>和“處理轉(zhuǎn)臺(tái)要求”和并為“處理餐臺(tái)要求”,用來表示“<wbr>處理客戶對(duì)餐臺(tái)提出要求”。目前,我用extend關(guān)系來表示“<wbr>處理餐臺(tái)要求”與“處理并臺(tái)要求”或“處理轉(zhuǎn)臺(tái)要求”<wbr>之間的關(guān)系。但總覺得不妥,因?yàn)椤癳xtend”表示的是“<wbr>可選”關(guān)系,但實(shí)際上我想表達(dá)的是一旦客戶對(duì)餐臺(tái)提出要求,<wbr>不是并臺(tái)要求就是轉(zhuǎn)臺(tái)要求,是“必選”其中之一。因此“<wbr>處理餐臺(tái)要求”這個(gè)用例起到的作用似乎僅僅是“歸納”,<wbr>我覺得這個(gè)里有些不妥,但又不知道如何處理上述這種情況。(<wbr>不知道realize關(guān)系是否更確切)</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>
我本人使用UML建模時(shí)間不長,因此對(duì)一些概念的理解不深,<wbr>希望您能給予指點(diǎn)。</wbr>
我的回復(fù):
Leo你好:
這是個(gè)挺好的例子。先
提個(gè)小意見,
“處理并臺(tái)要求”和“處理轉(zhuǎn)臺(tái)要求”業(yè)務(wù)用例的
命名不太合適。這些業(yè)務(wù)用例是為顧客服務(wù)的,顧客是業(yè)務(wù)主角。所以如果加上業(yè)務(wù)主角,連起來念成“顧客處理轉(zhuǎn)臺(tái)要求”就不通了,“餐館處理轉(zhuǎn)臺(tái)要求”才說得通。但顯然餐館并不是業(yè)務(wù)主角,只是業(yè)務(wù)工人而已。所以,業(yè)務(wù)用例命名為“要求轉(zhuǎn)臺(tái)”和“要求并臺(tái)”比較合適。
書歸正轉(zhuǎn),我們說
業(yè)務(wù)用例必須要是明確的、完整的、獨(dú)立的表達(dá)業(yè)務(wù)主角的業(yè)務(wù)目標(biāo),例如“
要求
并臺(tái)
”和
“要求
轉(zhuǎn)臺(tái)
”就是完整的、明確的目標(biāo),但你后來合并出來的“
處理餐臺(tái)要求
”就不是明確的(什么要求?)和獨(dú)立的(包含很多目標(biāo)),它不符合業(yè)務(wù)用例的規(guī)則,所以導(dǎo)致你后面的困惑。
你遇到的問題是用例視圖比較零亂,其實(shí)這個(gè)并不是用例識(shí)別的問題,而是信息組織的問題。當(dāng)你把多個(gè)邊界的用例都放在一起,這些用例的信息之間沒有相關(guān)性,就會(huì)顯得
零亂。所以第一,只把同一個(gè)邊界內(nèi)的業(yè)務(wù)用例放在一個(gè)視圖里,或者,把每個(gè)邊界定義成一個(gè)包,相關(guān)的用例和用例視圖都放在一起;
如果同一個(gè)邊界內(nèi)也有很多業(yè)務(wù)用例,并且之間也出現(xiàn)信息相關(guān)度不高的情況呢?這種情況一般只會(huì)發(fā)生在同一個(gè)邊界有多個(gè)業(yè)務(wù)主角的情況,多個(gè)業(yè)務(wù)主角各有各有抽象角度,即業(yè)務(wù)目標(biāo),這些抽象角度或業(yè)務(wù)目標(biāo)彼此有可能是完全無關(guān)的,因此也會(huì)導(dǎo)致信息零亂。所以第二,在第一條的基礎(chǔ)上,為每個(gè)業(yè)務(wù)主角建立一個(gè)業(yè)務(wù)用例視圖,只把該業(yè)務(wù)主角的業(yè)務(wù)用例顯示在該視圖里;
如果同一個(gè)業(yè)務(wù)主角有許多的業(yè)務(wù)目標(biāo),這些業(yè)務(wù)目標(biāo)明顯的分屬于不同的業(yè)務(wù)領(lǐng)域或可以明顯的分類,那么第三,在第一條的基礎(chǔ)上,為信息做分類,為每個(gè)分類建立一個(gè)用例視圖,把與該分類相關(guān)的業(yè)務(wù)用例顯示在上面。
根據(jù)上面的指導(dǎo)原則,你的問題就可以歸結(jié)為:1. 以“處理顧客請(qǐng)求”為邊界,所有與顧客請(qǐng)求有關(guān)的業(yè)務(wù)用例都放在這個(gè)邊界包里;2.如果有的請(qǐng)求是顧客提出的,有的是由服務(wù)人員代顧客提出的,或者顧客也分好幾類,那么可以為每類業(yè)務(wù)主角建立一個(gè)用例視圖,如“顧客請(qǐng)求視圖”,“服務(wù)人員代提請(qǐng)求視圖”;3.如果顧客請(qǐng)求分為很多類,比如并臺(tái)類的、轉(zhuǎn)臺(tái)類的,那么你可以為每個(gè)信息類別再建立用例視圖,例如“轉(zhuǎn)臺(tái)類請(qǐng)求用例視圖”和“并臺(tái)類請(qǐng)求用例視圖”。
請(qǐng)思考,用例視圖是用例的展示工具,每個(gè)視圖都表達(dá)了對(duì)同樣一組業(yè)務(wù)用例的不同角度的表達(dá)。所以只要需要,你就可以建立相應(yīng)的視圖去展示用例。同一個(gè)用例完全有可能出現(xiàn)在多個(gè)視圖上。例如“要求轉(zhuǎn)臺(tái)”業(yè)務(wù)用例就既會(huì)出現(xiàn)在“轉(zhuǎn)臺(tái)類請(qǐng)求視圖”里,又會(huì)出現(xiàn)在“顧客請(qǐng)求視圖”里。 相信這樣做以后就能解決你的問題了。
留給Leo及各位網(wǎng)友的問題:
接下來再深入一點(diǎn)討論。 正如Leo所說,不管是并臺(tái)還是轉(zhuǎn)臺(tái),甚至其它更多用例都會(huì)涉及更新上菜地點(diǎn)等信息。那我們?cè)趺幢磉_(dá)這一信息呢?可不可以建立一個(gè)命名為“
更新
上菜地點(diǎn)類業(yè)務(wù)視圖”的用例視圖,然后把所有會(huì)涉及到更新上菜地點(diǎn)的用例都展示在該視圖里呢? 為什么?
關(guān)于采用業(yè)務(wù)用例視圖來展示、歸納、整理業(yè)務(wù)用例的三點(diǎn)指導(dǎo)原則