狀態(tài)機(jī)入門:從定義到使用
狀態(tài)機(jī)是什么?狀態(tài)機(jī)應(yīng)該如何去應(yīng)用呢?狀態(tài)機(jī)可以對(duì)業(yè)務(wù)狀態(tài)進(jìn)行梳理,一目了然,之后可以根據(jù)業(yè)務(wù)場(chǎng)景不斷增加。
在工作過(guò)程中,意外接觸了一個(gè)詞——“狀態(tài)機(jī)”,這是個(gè)什么意思,可以為我們做產(chǎn)品提供怎樣的用處?
作為產(chǎn)品,為什么需要學(xué)習(xí)狀態(tài)機(jī)呢?
在剛進(jìn)入公司的時(shí)候,根據(jù)公司產(chǎn)品做流程圖的時(shí)候,發(fā)現(xiàn)自己經(jīng)常會(huì)漏了這樣或那樣的狀態(tài),導(dǎo)致整體流程會(huì)有問(wèn)題。后來(lái)知道了狀態(tài)機(jī)這樣的東西,發(fā)現(xiàn)用這幅圖就可以很清晰的表達(dá)整個(gè)狀態(tài)的流轉(zhuǎn)。當(dāng)然這個(gè)不是做好一款產(chǎn)品的必備品,但是卻可以讓你更加輕松的同技術(shù)等人員交流。
一、什么是狀態(tài)機(jī)?
就是就是狀態(tài)轉(zhuǎn)移圖。
如果流程圍繞某個(gè)事物的狀態(tài)變化進(jìn)行,顯而易見,該輪到狀態(tài)機(jī)圖上場(chǎng)了。一個(gè)狀態(tài)機(jī)圖中只描述一個(gè)事物,該事物有多個(gè)狀態(tài),不同的動(dòng)作作用到狀態(tài)上導(dǎo)致狀態(tài)的轉(zhuǎn)換。
舉個(gè)最簡(jiǎn)單的例子:
人有三個(gè)狀態(tài):健康、感冒、康復(fù)中。
觸發(fā)的條件有淋雨(t1)、吃藥(t2)、打針(t3)、休息(t4)。
所以狀態(tài)機(jī)就是健康->(t4)->健康;健康->(t1)->感冒;感冒->(t3)->健康;感冒->(t2)->康復(fù)中;康復(fù)中->(t4)->健康等等。就是這樣狀態(tài)在不同的條件下,跳轉(zhuǎn)到自己或不同狀態(tài)的圖。
狀態(tài)機(jī)可歸納為4個(gè)要素,即現(xiàn)態(tài)、條件、動(dòng)作、次態(tài)。這樣的歸納,主要是出于對(duì)狀態(tài)機(jī)的內(nèi)在因果關(guān)系的考慮。“現(xiàn)態(tài)”和“條件”是因,“動(dòng)作”和“次態(tài)”是果。
詳解如下:
- 現(xiàn)態(tài):是指當(dāng)前所處的狀態(tài)。
- 條件:又稱為“事件”,當(dāng)一個(gè)條件被滿足,將會(huì)觸發(fā)一個(gè)動(dòng)作,或者執(zhí)行一次狀態(tài)的遷移。
- 動(dòng)作:條件滿足后執(zhí)行的動(dòng)作,動(dòng)作執(zhí)行完畢后,可以遷移到新的狀態(tài),也可以仍舊保持原狀態(tài)。動(dòng)作不是必需的,當(dāng)條件滿足后,也可以不執(zhí)行任何動(dòng)作,直接遷移到新狀態(tài)。
- 次態(tài):條件滿足后要遷往的新狀態(tài)?!按螒B(tài)”是相對(duì)于“現(xiàn)態(tài)”而言的,“次態(tài)”一旦被激活,就轉(zhuǎn)變成新的“現(xiàn)態(tài)”了。
在了解關(guān)于狀態(tài)機(jī)的文章后,結(jié)合自己的平時(shí)的學(xué)習(xí)總結(jié),我發(fā)現(xiàn):在平時(shí)的業(yè)務(wù)過(guò)程中,判斷即對(duì)應(yīng)狀態(tài)機(jī)理論中的條件,我們做什么操作改變狀態(tài)即理論中的動(dòng)作,同時(shí)狀態(tài)必須要有始有終,否則會(huì)出現(xiàn)狀態(tài)卡住,無(wú)法繼續(xù)正常推進(jìn)。
狀態(tài)機(jī)的開始一般用空心圓表示,代表狀態(tài)圖的起始位置。
結(jié)尾一般用實(shí)心圓點(diǎn)表示,是一個(gè)狀態(tài)的終止點(diǎn)。
二、那么狀態(tài)機(jī)怎樣去應(yīng)用呢?
以物理課學(xué)的燈泡圖為例:就是一個(gè)最基本的小型狀態(tài)機(jī),這個(gè)例子人人里的很多大神都已經(jīng)舉過(guò)了,這里就簡(jiǎn)單說(shuō)下。
這里就是兩個(gè)狀態(tài):①打開開關(guān),燈泡亮;②關(guān)閉開關(guān),燈泡滅。
可以畫出以下的狀態(tài)機(jī)圖:
如果進(jìn)度卡住,該怎么辦?
這里有個(gè)比較形象的案例就是淘寶的自動(dòng)確認(rèn)收貨,賣家發(fā)貨后狀態(tài)變?yōu)榇肇?,若買家遲遲不點(diǎn)確認(rèn)收貨的話,那么流程就停止在這里,賣家也遲遲收不到貨款。
因此,在這里,淘寶做了一個(gè)條件,判斷時(shí)間是否達(dá)到15天,如果達(dá)到15天,做出確認(rèn)收貨的動(dòng)作,使得狀態(tài)得到流轉(zhuǎn)。
以小燈泡為例:假設(shè)為了節(jié)約,小燈泡開了超過(guò)8個(gè)小時(shí)就自動(dòng)關(guān)閉,除非再次做打開開關(guān)的操作,畫出此時(shí)的狀態(tài)機(jī)圖如下:
同樣的狀態(tài)判斷應(yīng)用了很多場(chǎng)景,例如:患者購(gòu)買服務(wù)或商品時(shí),訂單由待支付-已支付的狀態(tài)中的通過(guò)時(shí)間條件來(lái)實(shí)現(xiàn)狀態(tài)得到繼續(xù)流轉(zhuǎn)。
但是,判斷不是狀態(tài)機(jī)必要的,如:正常小燈泡的兩種狀態(tài),可以不需要經(jīng)過(guò)判斷。起始和終止?fàn)顟B(tài)可能是相同的,也可能是不同的,即同一種狀態(tài)可能是起始狀態(tài),也可能為終止?fàn)顟B(tài)。
在這里以外賣app為例:制作了一個(gè)訂單的簡(jiǎn)單的狀態(tài)機(jī)圖,以訂單的狀態(tài)變更推動(dòng)。
三、總結(jié)
新入門時(shí),對(duì)狀態(tài)機(jī)和業(yè)務(wù)流程圖總是傻傻分不清楚,因此對(duì)于狀態(tài)機(jī)和流程圖進(jìn)行了了解和歸納。
總的來(lái)說(shuō),狀態(tài)機(jī)圖和業(yè)務(wù)流程圖有些類似,但是又有不同:
- 兩者是兩種不同的思維方式;
- 兩者思考的出發(fā)點(diǎn)不一樣,因而兩者所表達(dá)的目的也是不同的;
- 兩者的各個(gè)節(jié)點(diǎn)都是不同的,流程圖為動(dòng)作,狀態(tài)機(jī)為狀態(tài)。
一般情況下,我們使用的均為有限狀態(tài)機(jī)。狀態(tài)機(jī)可以對(duì)業(yè)務(wù)狀態(tài)進(jìn)行梳理,一目了然,之后可以根據(jù)業(yè)務(wù)場(chǎng)景不斷增加。
同時(shí),使用狀態(tài)機(jī)和相關(guān)人員,尤其是開發(fā),進(jìn)行表達(dá)時(shí),也可以更加清晰,提升溝通效率。
本文由@卉子醬 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來(lái)自 Pexels,基于 CC0 協(xié)議
明白了
流程圖的流程節(jié)點(diǎn)用直角邊的矩形表示,而且只能由一個(gè)箭頭輸出。
狀態(tài)圖的狀態(tài)是圓角的矩形表示,可以有多個(gè)箭頭輸出。
如果你都用直角邊的矩形表示,那自然傻傻分不清楚了。
最下面的圖畫得也很有問(wèn)題,很多箭頭上沒有動(dòng)作,4要素的“條件”和“動(dòng)作”呢?
比如退款失敗->待商家確認(rèn),退款成功->訂單關(guān)閉,兩處都沒有動(dòng)作,請(qǐng)問(wèn)退款成功狀態(tài)轉(zhuǎn)移到訂單關(guān)閉狀態(tài)是否自動(dòng),如果自動(dòng)為什么要多設(shè)置一個(gè)狀態(tài),有何意義?如果不自動(dòng)需要手動(dòng),那么這個(gè)動(dòng)作誰(shuí)來(lái)做?又是什么動(dòng)作。
很實(shí)用
狀態(tài)機(jī)還有另外一種表現(xiàn)方式,類似于表格??梢粤私庖幌?/p>