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