理清楚狀態(tài)機,也將理清楚產(chǎn)品的業(yè)務(wù)邏輯
產(chǎn)品的業(yè)務(wù)功能設(shè)計基本上都離不開業(yè)務(wù)狀態(tài)的流轉(zhuǎn)。隨著業(yè)務(wù)的推進,一個業(yè)務(wù)對象會從一個狀態(tài)轉(zhuǎn)變到另一個狀態(tài),這種狀態(tài)的流轉(zhuǎn)就是狀態(tài)機(State Machine)。本篇我們來講講如何進行狀態(tài)機設(shè)計,相信看完后,你將梳理清楚了業(yè)務(wù)的狀態(tài)及其流轉(zhuǎn)條件。
在產(chǎn)品設(shè)計中,很多業(yè)務(wù)對象會有多個狀態(tài),通過狀態(tài)機可以很好地梳理單個業(yè)務(wù)對象業(yè)務(wù)狀態(tài)如何流轉(zhuǎn)。同時,對于多個關(guān)聯(lián)的業(yè)務(wù)對象,也可以實用狀態(tài)機和流程圖結(jié)合的方式,梳理業(yè)務(wù)環(huán)節(jié)上的多個業(yè)務(wù)對象的狀態(tài)流轉(zhuǎn)以及他們之間如何相互影響。
01 前言
產(chǎn)品的業(yè)務(wù)功能設(shè)計基本上都離不開業(yè)務(wù)狀態(tài)的流轉(zhuǎn),比如訂單狀態(tài)會有:待付款、待發(fā)貨(已付款)、已發(fā)貨、已完成、已評價、已取消等等狀態(tài)。隨著業(yè)務(wù)的推進,一個業(yè)務(wù)對象會從一個狀態(tài)轉(zhuǎn)變到另一個狀態(tài),這種狀態(tài)的流轉(zhuǎn)就是狀態(tài)機(State Machine)。狀態(tài)機在業(yè)務(wù)流轉(zhuǎn)的產(chǎn)品設(shè)計中非常重要,如果梳理清楚了業(yè)務(wù)的狀態(tài)及其流轉(zhuǎn)條件,那么整個產(chǎn)品的業(yè)務(wù)邏輯就會非常清晰。本篇我們來講講如何進行狀態(tài)機設(shè)計。
02 什么是狀態(tài)機
我們先來看下面的訂單狀態(tài)機圖,然后再來講狀態(tài)機的具體定義。
從上面的圖我們可以看到這是訂單的業(yè)務(wù)狀態(tài)流轉(zhuǎn)圖。
這里有一個起始狀態(tài),就是待付款,這是在用戶下單后形成的。然后有三個結(jié)束狀態(tài),已取消、已完成和已評價。
為什么已完成也是結(jié)束狀態(tài),是因為用戶評價不是必要的環(huán)節(jié)。
這里我們就得到了狀態(tài)機的第一個關(guān)鍵要素:狀態(tài)機由若干個不重疊的狀態(tài)組成,狀態(tài)機中至少有一個起始狀態(tài)和一個結(jié)束狀態(tài)。
然后我們也會看到,狀態(tài)和狀態(tài)之間是通過一條單向的線條連接的,這里引出了狀態(tài)機的一個特征:狀態(tài)機是有個有向圖。最后,線條上注明了一個動作,這是促發(fā)狀態(tài)改變的動作,也就是狀態(tài)的改變是由外部的動作促發(fā)的。
結(jié)合上面的例子,我們就得到了狀態(tài)機的定義:狀態(tài)機是一個有向圖形,由一組狀態(tài)和一組相應(yīng)的動作組成。狀態(tài)機通過響應(yīng)一系列動作而運行。
03 如何在產(chǎn)品設(shè)計中使用狀態(tài)機
了解到狀態(tài)機的定義,我們來看看如何在產(chǎn)品設(shè)計中使用它。這里分下面幾個步驟:
- 列舉某個業(yè)務(wù)對象的狀態(tài),這里需要使用 MECE 原則,即窮盡而不重復(fù),將業(yè)務(wù)對象的所有狀態(tài)都列舉出來。比如上面的訂單狀態(tài)圖,其實我們就遺漏了已退款、部分退款這兩個狀態(tài)。
- 梳理哪些狀態(tài)是起始狀態(tài),哪些狀態(tài)是結(jié)束狀態(tài),以確定業(yè)務(wù)的開始和結(jié)束。
- 確定狀態(tài)直接的流轉(zhuǎn)次序,并且列出促使?fàn)顟B(tài)流轉(zhuǎn)的動作,也就是具體的業(yè)務(wù)行為。
- 確定每個具體業(yè)務(wù)行為需要提交的數(shù)據(jù)和產(chǎn)生的數(shù)據(jù),即業(yè)務(wù)行為的輸入輸出。
實際簡化出來就是“定狀態(tài)、理流程、明數(shù)據(jù)”三個要點。我們再舉一個我們產(chǎn)品開發(fā)的任務(wù)管理的例子。對于產(chǎn)品開發(fā)任某個需求點,通常會經(jīng)過需求評審到上線的過程。我們按照上面的步驟進行一下狀態(tài)機的分析:
- 狀態(tài)列舉:整個過程有待評審、被駁回、待開發(fā)、開發(fā)中、待測試、待驗收、已上線7個狀態(tài)。
- 待評審屬于起始狀態(tài),被駁回、已上線屬于結(jié)束狀態(tài)。
- 狀態(tài)的流轉(zhuǎn)圖如下:
每個業(yè)務(wù)行為的輸入輸出如下表所示。
04 狀態(tài)機與流程圖的區(qū)別
我們看上面的產(chǎn)品開發(fā)的任務(wù)管理狀態(tài)機圖其實并不是特別合理,我們可以看到不同的狀態(tài)的流轉(zhuǎn)其實的業(yè)務(wù)動作是一樣的,比如評審不通過和通過實際上的行為應(yīng)該是評審。
之所以會出現(xiàn)這個情況,是因為實際上這里揉和了多個業(yè)務(wù)對象:需求、開發(fā)任務(wù)、測試任務(wù)等等。
這種需要描述多個對象的狀態(tài)機的情況,那么應(yīng)該結(jié)合流程圖來做,如下圖所示。
這種方式可以將業(yè)務(wù)對象的狀態(tài)變化和業(yè)務(wù)流程串聯(lián)起來,會更好地知道哪些狀態(tài)受關(guān)聯(lián)的業(yè)務(wù)環(huán)節(jié)影響,比如需求的開發(fā)中狀態(tài)就依賴開發(fā)任務(wù)的確認開始動作。
可以看到,狀態(tài)機和流程圖某些方面是類似的,都是用來描述業(yè)務(wù)流轉(zhuǎn),但是二者也存在明顯的不同,狀態(tài)機更關(guān)注的業(yè)務(wù)環(huán)節(jié)中某個對象自身的狀態(tài)變化,而流程圖更適合描述整個業(yè)務(wù)的環(huán)節(jié)的不同行為如何銜接各個業(yè)務(wù)對象。
也就是,狀態(tài)機關(guān)注的范圍相對會更小一些。
如果一個業(yè)務(wù)對象的狀態(tài)流轉(zhuǎn)無法通過作用于自身的業(yè)務(wù)行為表示,就可以引入相關(guān)業(yè)務(wù)對象的狀態(tài)機和流程圖來共同繪圖表示。
由于同時繪制多個業(yè)務(wù)對象的狀態(tài)機圖可能會很復(fù)雜,因此建議將主路徑用強調(diào)出來,這樣可以很清晰地知道主流程如何流轉(zhuǎn)。
05 總結(jié)
本篇介紹了狀態(tài)機在產(chǎn)品設(shè)計中的應(yīng)用,通過狀態(tài)機可以很好地梳理單個業(yè)務(wù)對象業(yè)務(wù)狀態(tài)如何流轉(zhuǎn)。同時,對于多個關(guān)聯(lián)的業(yè)務(wù)對象,也可以實用狀態(tài)機和流程圖結(jié)合的方式,梳理業(yè)務(wù)環(huán)節(jié)上的多個業(yè)務(wù)對象的狀態(tài)流轉(zhuǎn)以及他們之間如何相互影響。
實際我們產(chǎn)品設(shè)計過程中就可以采取“定狀態(tài)、理流程、明數(shù)據(jù)”的方式去梳理業(yè)務(wù)。
作者:產(chǎn)品海豚灣;公眾號:產(chǎn)品海豚灣(ID:pm-dophin-bay)
本文由@產(chǎn)品海豚灣 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。
畫的好好
好多地方語法有問題,很難理解作者想表達的意思
簡單來說就是通過狀態(tài)機這個工具可以梳理某個業(yè)務(wù)對象的狀態(tài),以及通過什么業(yè)務(wù)行為觸發(fā)狀態(tài)的變化。