當(dāng)你腦子里有一個(gè)商業(yè)案例時(shí)骂远,你該怎么向老板介紹呢刻恭?一大段文字,或是動(dòng)手寫個(gè) Demo硼一?老板很忙累澡,老板也不見得懂你所說的“高大上”技術(shù),有沒有那種實(shí)現(xiàn)成本較低但又包含較多信息的表現(xiàn)方式呢般贼?有愧哟,畫張圖唄奥吩!
今天起再開個(gè)專題,談?wù)勎覀冮_發(fā)中常用到的一些圖形建模手段蕊梧。前言結(jié)束霞赫,我們從 UML 視圖啟航。
UML Use Case 圖
UML——Unified Modeling Language——統(tǒng)一建模語言望几,是業(yè)務(wù)建模階段最常用和最重要的一種視圖绩脆。由于它簡單易懂萤厅,常常用于跨組織的文檔或演示的說明中橄抹;這里所謂的跨組織指的不僅僅是開發(fā)部門間,而是指跨產(chǎn)品惕味、設(shè)計(jì)楼誓、測試、運(yùn)維等等部門的業(yè)務(wù)交流中名挥。UML 設(shè)計(jì)中疟羹,第一張圖一般都是用例圖:是的,就是那個(gè)有“小人”的圖禀倔。
用例圖主要有三個(gè)部分組成:用例(Use Case)榄融、參與者(Actor),以及它們互相間的關(guān)系(Relationship)救湖;形式上就是用橢圓愧杯、小人,以及箭頭的連線組合鞋既。
例子
我們先不細(xì)說橢圓或是箭頭的具體含義力九。我覺得講用例圖最好還是從具體的 Use case 入手為好。我們試著設(shè)計(jì)一款簡單的銀行 APP邑闺,它包含注冊跌前、登陸、交易等等操作陡舅。我們一步步拆解揮著用例圖的過程抵乓。
Systems
畫用例圖的第一步通常是拖出一個(gè)巨大的矩形塊,并將其命名為我們的目標(biāo)系統(tǒng)——Banking App靶衍。一個(gè)用例圖一般只會(huì)有一個(gè) System灾炭,之后我們會(huì)把所有該系統(tǒng)相關(guān)的是功能(“用例”)放置在系統(tǒng)內(nèi)部,系統(tǒng)的相關(guān)方(“參與者”)放置在系統(tǒng)的左右兩側(cè)摊灭。
Actors
第二個(gè)繪制元素就是參與者咆贬,即系統(tǒng)相關(guān)方,可以是人帚呼、組織掏缎、外部設(shè)備皱蹦,或是其他系統(tǒng)。在我們這個(gè)銀行案例里眷蜈,該 App 的相關(guān)方有兩個(gè):就是客戶(Customer)和銀行(Bank)沪哺。
通常來說,一個(gè)用例圖中會(huì)有兩三個(gè)參與者酌儒,我們會(huì)把主要參與者放在系統(tǒng)左側(cè)辜妓,次要參與者(主要參與者的回應(yīng)方)放在右側(cè);顯然我們的 App 主要是面向客戶的忌怎,所以把客戶放在了左邊籍滴。
Use Case
第三步就是在系統(tǒng)內(nèi)添加具體的用例,也就是該系統(tǒng)所提供的功能或是業(yè)務(wù)塊榴啸。我們的銀行 APP 比較簡單孽惰,只提供如下業(yè)務(wù):
- 用戶登錄(login)
- 查看余額(check balance)
- 轉(zhuǎn)賬(transfer funds)
- 消費(fèi)(make payment)
Relationships
第四步,我們再把參與者與用例串聯(lián)起來鸥印,就是我們所說的關(guān)系(Relationships)勋功。用例圖中,關(guān)系還可以繼續(xù)細(xì)分:
-
association
“關(guān)聯(lián)”是最樸素库说、最通用的一種關(guān)系形式——UML 圖中用實(shí)線表示狂鞋。如下所示,客戶在操作 App 時(shí)潜的,能使用到登陸骚揍、查看余額、轉(zhuǎn)賬和交易等等操作夏块,我們就可以簡單的將客戶和這幾個(gè)用例通過“關(guān)聯(lián)”綁定起來疏咐。再看銀行方面,當(dāng)客戶查看余額脐供、轉(zhuǎn)賬浑塞、交易時(shí),它自然要有所回應(yīng)政己,所以也需要將它和這三個(gè)用例“關(guān)聯(lián)”起來酌壕;而登陸操作是系統(tǒng)自動(dòng)鑒權(quán)的,因此不與銀行方連接歇由。
-
include & extend
還有一些關(guān)系表示“包含”和“擴(kuò)展”卵牍,比如客戶在輸入用戶名密碼后,系統(tǒng)需要驗(yàn)證登陸有效性沦泌,這個(gè)操作是每一次登陸后必然發(fā)生的用例糊昙,我們會(huì)用
<<include>>
來連接這兩個(gè)先后發(fā)生的事件;但是登陸“有可能”會(huì)失敗谢谦,這時(shí)候系統(tǒng)會(huì)顯示一個(gè)錯(cuò)誤信息释牺,我們把這種后續(xù)可能發(fā)生的用例萝衩,用<<extend>>
來表示它與之前用例的關(guān)系。UML 中没咙,“包含”和“擴(kuò)展”在表現(xiàn)上就是虛線+箭頭的形式猩谊,然后在虛線上方注釋具體的關(guān)系形式。 -
Generalization
另外一種常見的關(guān)系叫做“泛化”祭刚,也可以稱作“繼承”牌捷。繼承在 UML 中的表現(xiàn)方式是實(shí)線+空心箭頭。還是以我們銀行 App 為例涡驮,現(xiàn)在的銀行通常提供多種賬戶支付手段暗甥,你既可以從儲(chǔ)蓄賬戶里支取現(xiàn)金,也可以從一些 T+0 的貨幣型基金賬戶扣錢遮怜;而這兩種細(xì)分的支付手段淋袖,如下所示鸿市,在用例圖中可以表示為通用支付用例的泛化用例:
當(dāng)然锯梁,“泛化”(或是“繼承”)并不局限于用例之間,也可以是參與者繼承參與者的形式焰情,如 VIP 客戶和普通客戶都可以是通用客戶的泛化參與者陌凳。
Extension points & Note
最后,所有 UML 視圖事實(shí)上都可以加注釋内舟,專業(yè)術(shù)語叫延伸(Extension points)和批注(Note)合敦;這兩種注釋性質(zhì)形同,都是起說明作用:
- 延伸:通常是用例橢圓下半?yún)^(qū)加注的說明验游,相對來說內(nèi)容較少
- 批注:是一個(gè)類似文本的圖案充岛,用虛線連接特定元素,可以附帶較多文字信息
小結(jié)
好了耕蝉,UML 用例圖大體就講完了崔梗。我們再回顧一下用例圖的使用場景,在產(chǎn)品設(shè)計(jì)階段垒在,我們可以使用用例圖為用戶蒜魄、系統(tǒng)和功能服務(wù)建立起抽象關(guān)系,以便描述產(chǎn)品所呈現(xiàn)的外部動(dòng)態(tài)特征场躯。在一些大廠中谈为,通常由產(chǎn)品經(jīng)理或是設(shè)計(jì)師來首先繪制 UML 用例圖,再交于開發(fā)團(tuán)隊(duì)實(shí)現(xiàn)踢关。
我們舉了一個(gè)銀行 App 的例子伞鲫,事實(shí)上有點(diǎn)大了;現(xiàn)實(shí)開發(fā)中签舞,一個(gè) Use Case 圖通常只對應(yīng)的一個(gè)簡單的業(yè)務(wù)流而已秕脓。我們自己在寫用例圖時(shí)驹闰,也要注意在宏觀層面將聯(lián)系緊密的功能模塊抽象為一個(gè)簡單的 Case,然后逐步地為這些較大的功能模塊畫出細(xì)分 Case 的用例圖撒会。