后臺系統(tǒng)設(shè)計:工作流設(shè)計剖析

11 評論 37139 瀏覽 318 收藏 21 分鐘

關(guān)于后套工作流,作者做了一個總結(jié),希望能夠給你帶來啟發(fā)。

一般在稍微復雜一些的后臺系統(tǒng)中,工作流的設(shè)計是不可避免的一個重要部分。設(shè)計好一個后臺工作流,不僅可以使得后期使用系統(tǒng)的時候更加高效,同時也是十分考驗產(chǎn)品經(jīng)理的。剛好最近自己在做這方面的工作,所以總結(jié)了一些方法經(jīng)驗與大家共勉。

一、了解什么是工作流及工作流的類型

在企業(yè)級的一些系統(tǒng)中,工作流是非常常見的一個輔助功能,因為許多操作是無法通過操作者一個人來完成的。在后臺系統(tǒng)中,用到工作流的我認為大致可以分為以下兩個方面:

①涉及到流程審批的系統(tǒng)功能

工作流涉及到流程審批的系統(tǒng)很常見,比如一般OA中的請假申請,加班申請,出差申請;人事系統(tǒng)中的入職流程審批,離職審批。公司內(nèi)部如果有業(yè)務(wù)系統(tǒng)中某些比較重要或者比較謹慎的操作,也需要層層審批。

對于流程審批類的工作流,其特點為會將審批的角色劃分為生產(chǎn)者與處理者。生產(chǎn)者即生產(chǎn)數(shù)據(jù)的角色,其在工作流的工作為新數(shù)據(jù)的添加;處理者即對已有數(shù)據(jù)的進行某些操作。

從某種意義上講,工作流所進行的某些功能操作是以處理者的需求進行設(shè)計的。只是因為某些生產(chǎn)類型的工作較為低級,或者某些生產(chǎn)工作較為繁瑣,處理者的職能地位已經(jīng)不允許他去做這些工作,所以這些工作就被“下放”到了生產(chǎn)者當中,而處理者只需要判斷一下生產(chǎn)者的工作是否進行得當,并且提出一定的意見,讓生產(chǎn)者不斷地修改以期達到處理者最終想要得到的目的。

例如在進行請假審批的時候,領(lǐng)導需要看到的是請假者請假的事由,天數(shù),請假類型等等,而不是請假者為了讓領(lǐng)導看明白自己將請假的內(nèi)容填寫的詳盡。所以我們在設(shè)計流程審批類的工作流時,需求方更多的要從處理者去考慮,要去把握他們需要什么,再從中去設(shè)計定義內(nèi)容。

②需要多人協(xié)作完成的工作

對于此種工作流來說,其目的主要是為了讓某個角色更加專注的去進行某項工作。類似于流水線工作,在系統(tǒng)中所體現(xiàn)的就是到了哪一個步驟就將該工作流程流轉(zhuǎn)到某個角色,完成后再流轉(zhuǎn)到下一個角色,將所有的角色的工作流程串接起來,就是某項工作完整的工作流程。

比如電商后臺中WMS的庫存盤點。此功能的工作必然要涉及到核對采購單,核對銷售單,入庫盤點,差異登記,庫存更新等這一些列的操作,而這些操作則可以簡單分為盤點前,盤點中,盤點后。

所以其流程就可以按照功能設(shè)計成這樣:首先采購人員、銷售人員報備采購單、銷售單,接著庫管人員進行庫存盤點,最后數(shù)據(jù)記錄人員進行差異登記,庫存更新,三個部分相互獨立卻又依次關(guān)聯(lián)。關(guān)于此種類型的工作流,梳理前后邏輯關(guān)系流程,進行有效的功能拆分。并且可以通過某些操作將其串聯(lián)起來是設(shè)計中的重點。

二、工作流的設(shè)計要點

那么,在了解什么是工作流后,要設(shè)計好一個工作流,應(yīng)該要考慮以下幾個設(shè)計要點。

首先,我們按照一個正常工作流的功能,可以將工作流拆分成以下幾塊內(nèi)容。

  • 第一、工作流內(nèi)容的生產(chǎn),消費,處理;
  • 第二、不同情況的工作流狀態(tài);
  • 第三,工作流程的制訂及角色的劃分。簡單來說,就是要理清角色、內(nèi)容、流程這三者的關(guān)系。

第一、工作流內(nèi)容的生產(chǎn),處理,消費

對于流程審批類的工作流來說,工作流內(nèi)容的生產(chǎn)端一般來說角色等級都比較低,僅僅作為數(shù)據(jù)的記錄者而沒有任何的處理權(quán)限。所以在設(shè)計的時候,任何可以在生產(chǎn)端直接進行數(shù)據(jù)處理的操作都要慎重考慮。比如,是否允許數(shù)據(jù)基本的錄入者直接進行刪改的權(quán)限?

某些對于數(shù)據(jù)狀態(tài)的變更是否可由其進行變更。而進行到了數(shù)據(jù)的處理階段,最終要對該項功能所填寫的數(shù)據(jù)進行產(chǎn)出,而在處理階段的操作,可以分為兩種情況:

  • 一種是只做流轉(zhuǎn)操作,其流程節(jié)點可以理解為一個高級篩選功能,目的只是為了決定是否讓此條數(shù)據(jù)流轉(zhuǎn)到下一節(jié)點。
  • 第二種情況是流轉(zhuǎn)的同時需要進行數(shù)據(jù)的修改或者補充。

這兩種流程角色的不同,定義著其在整個流程中的操作不同,一個只做通過駁回掛起等流轉(zhuǎn)性操作,一個卻可以進行信息的補充,刪改,以及其他內(nèi)容的添加。在設(shè)計工作的時候,要理清處理階段的角色工作模式,才能將工作流設(shè)計好。

對于多人協(xié)作的工作流來說,其每一個角色都是數(shù)據(jù)的生成者,每一個角色也都是數(shù)據(jù)的處理者。這個時候,類似于流程審批類的處理權(quán)限控制就沒有必要設(shè)計了。因為每一個流程操作的內(nèi)容劃分的都很明確,流程與流程之間的操作并沒有重疊之處,上一個流程的操作只是作為一個流程的前置支撐而已。所以在這個時候,要處理好的是角色之間的功能拆分,確保每一個角色每一個流程所進行的操作都是在流程下的充分必要條件。

關(guān)于數(shù)據(jù)的消費,指的是數(shù)據(jù)產(chǎn)生后是為了做什么。對于不同的角色來說數(shù)據(jù)的產(chǎn)生有著不同的功能,在設(shè)計工作流的時候,也要適當?shù)陌堰@些考慮進去。因為我們設(shè)計的時候往往只關(guān)注數(shù)據(jù)的生成,而不去關(guān)注生成之后他要去做什么。

比如我最近在做的一套商管系統(tǒng),簽訂合同完成后是為了生成店鋪,進行店鋪的操作,所以數(shù)據(jù)審批完成后就應(yīng)該抄送一份給店鋪管理的角色。

比如某些采購單審批通過了 ,可能消費數(shù)據(jù)的并不是采購貨物的人員,還有財務(wù)人員需要進行入賬處理,所以數(shù)據(jù)應(yīng)該也給財務(wù)一份。所以我們在設(shè)計工作流的時候,不僅僅要考慮到數(shù)據(jù)在整個工作流中的直接消費者,其間接消費者也應(yīng)當進行考慮設(shè)計。

第二、不同情況的工作流狀態(tài)

一般來說,一個審批類工作流的狀態(tài)只從流程上來說的話大致可以分為這幾個階段:未審批–審批中–審批結(jié)束。不同的階段又可以拆分成不同的情況。

比如在未審批的情況下,可能會有已經(jīng)填寫但是未提交到工作流的情況,也可能會有已經(jīng)提交到工作流但是發(fā)現(xiàn)提交內(nèi)容出錯無法撤回的情況。所以在審批的情況下,視情況可以添加保存的操作(對應(yīng)的工作流狀態(tài)可為未提交);緊急撤回的操作(對應(yīng)的工作流狀態(tài)可為已撤回)。

在審批中,除了正常的一個節(jié)點一個節(jié)點的審核外,可能會遇到的情況還會有該條工作流流轉(zhuǎn)到這里時已經(jīng)廢棄了,此時可以加上廢棄的操作(對應(yīng)的工作流狀態(tài)可為已廢棄);還有可能流轉(zhuǎn)到這里時發(fā)現(xiàn)整個流程有問題或者由于其他原因?qū)τ谡麄€工作流有異議,但是可能該節(jié)點還有其他角色可以進行操作,所以需要將工作流暫時凍結(jié),待確定后再重新激活,所以此時工作流應(yīng)該加凍結(jié)/掛起的操作(對應(yīng)的工作流可為已凍結(jié)),以及對應(yīng)的重新激活的操作(對應(yīng)的工作流狀態(tài)展示即回到原有工作流的狀態(tài))。

同時,在審批中可能因為會有多個工作流的操作,但是這條操作比較著急,所以在數(shù)據(jù)的生產(chǎn)者端可以加上加急處理的操作,此時在處理者中看到的此條記錄應(yīng)當為置頂狀態(tài)。但是由于加急處理的權(quán)重比較高,所以并不是每一個角色都賦予這個操作權(quán)限。最后,應(yīng)該給審批中設(shè)置一個審批時效,超時后是應(yīng)當進行超時作廢還是超時退回也應(yīng)該有明確的目標。

最后,是審批結(jié)束,其也分為兩種情況:

一種是審批通過,一種是審批不通過。對于審批通過,即為該條記錄生成完成,可進行消費者的抄送等等操作,審批不通過,一般可以為駁回狀態(tài)。對于駁回狀態(tài),設(shè)計者需要考慮的是完全駁回還是駁回到上一個節(jié)點。

如果是完全駁回,則需要操作者重新填寫提交。如果是駁回到上一個節(jié)點,則上個節(jié)點的處理者應(yīng)該有數(shù)據(jù)的編輯權(quán)限,由其進行二次編輯后重新提交其優(yōu)點時流程較為優(yōu)化,時間可縮短,缺點為并不是所有的處理者都有編輯權(quán)限,邏輯方面需要設(shè)計者思考。

對于協(xié)同工作類的工作流,工作流的狀態(tài)相對來說就是比較簡單的了,其每一個流程節(jié)點都是獨立的,只有上一個節(jié)點的工作完全完成后,才可以流轉(zhuǎn)到下個節(jié)點,而且由于其沒有存在審批流的功能,所以在該節(jié)點填寫完成,提交至下一節(jié)點后當前節(jié)點的工作的工作就完成了。到下一個節(jié)點時與上一個節(jié)點邏輯相同直至結(jié)束。

三、工作流程的制訂及角色的劃分

這一點只針對審批類的工作流進行闡述。

傳統(tǒng)的工作流程來說大致可以分為這樣幾種情況:自由/半自由流程、固定流程、分支流程、并發(fā)流程與執(zhí)行、并發(fā)流程或執(zhí)行。

自由流程指的是從生產(chǎn)者到處理者每一個流程節(jié)點都可以由上個節(jié)點的操作者指定角色,半自由流程指的是指定角色的時候限定一定的范圍。固定流程指的是流程是所有的流程即角色都是固定好的,不能修改。

這種情況的優(yōu)點和缺點都極度的明顯:優(yōu)點即操作簡單,邏輯簡單,開發(fā)難度小。缺點為實用性較小,較為死板,不夠靈活。

分支流程指的是當流程滿足某一個跳轉(zhuǎn)條件時即進行流程的跳轉(zhuǎn)執(zhí)行子流程,當流程執(zhí)行完畢后再跳回到主流程進行接下來的流程操作。

比如某次采購單的采購,當采購金額小于100萬時需要采購經(jīng)理即可進行審批,當大于100萬時需要副總級別的人物進行審批后才可以進行。

并發(fā)流程與執(zhí)行指的是多個流程共同執(zhí)行,所有流角色程都執(zhí)行完畢后才流轉(zhuǎn)到下一個節(jié)點,比如某次項目的開始需要招商部,企劃部,工程部共同完成。只有當這些角色都審批完成了才能開始。并發(fā)流程或執(zhí)行指的是多個流程共同開始,只要有一個角色進行審批了,則流轉(zhuǎn)到下一個節(jié)點。在此不做贅述。在一般涉及到工作流的后臺中,這幾種情況大致就可以滿足。

以上可以稱之為標準工作流,即后臺給予固定的模板,相關(guān)配置人員進行配置即可。但是,在有些復雜的后臺系統(tǒng)中,可能是以上幾種情況共同出現(xiàn)的,也可能是出現(xiàn)了其他情況,這個時候,就需要整體流程定制化的操作。

那么,要設(shè)計一個非標準工作流,首先是分清上文提到的角色、內(nèi)容、流程之間的關(guān)系——即角色與內(nèi)容是掛在流程節(jié)點上的功能點。所以我們只需要將流程節(jié)點控制好,再將不同的角色,以及對應(yīng)的操作內(nèi)容掛靠上去即可,這樣一來是可以方便理清關(guān)系,另外也可以使系統(tǒng)更有層次。

所以接下來我們只需要將流程節(jié)點控制好即可。

控制好非標準流程節(jié)點,可以由以下幾個方面著手。

第一、如果流程配置者有配置SQL的能力,那么將數(shù)據(jù)庫流程配置權(quán)限開放,讓配置者自行配置,這樣的開發(fā)工作壓力會小一些,但與此同時,風險也會很大。

第二、畫流程圖的方式。一個流程的執(zhí)行可以通過流程圖來表現(xiàn),對于產(chǎn)品經(jīng)理來說是再熟悉不過了。通過流程圖的基本邏輯,可以將流程中遇到的各種情況可視化的展示出來,條理清晰而且操作簡單。缺點即開發(fā)難度過大,一般小團隊難以勝任。

第三、通過一一配置功能來進行配置,這種方式雖然表面上看起來十分的繁瑣,但是相對于前兩種來說開發(fā)難度小,且對于配置者的能力要求不高。具體來說,要單獨配置每一項功能的流程,先確定流程的主流程有幾個節(jié)點,如果碰到判斷的節(jié)點選擇是,碰到并發(fā)流程或執(zhí)行的節(jié)點選擇最長的一個流程。確定之后,將所有節(jié)點的內(nèi)容操作與角色配置出來,然后再配置該節(jié)點是否進行判斷,是否進行或操作,是否進行與操作。如果有判斷操作時,則分出一個子流程,再將子流程按照上述方式進行配置,最終歸于主流程的某一個節(jié)點。如果有與操作時,要確定配置與操作的分支節(jié)點時是要配置在單個節(jié)點還是多個節(jié)點。單個節(jié)點的話則需滿足這兩個節(jié)點才往下進行,多個節(jié)點時則將這幾個節(jié)點作為一個小流程單獨按照上述方式進行配置再合并至主流程,看是否滿足與行為。如果有或操作判斷時,同樣要確定在哪個節(jié)點的或操作至哪個節(jié)點可以進行另外的節(jié)點流轉(zhuǎn)。

以上這些情況對于開發(fā)團隊來說也是一個巨大的考驗,因為不同的工作流程代表著不同權(quán)限的操作,不同狀態(tài)的流轉(zhuǎn),而可定制化的流程則代表著其中的變化無窮,對于服務(wù)器的壓力,數(shù)據(jù)庫的冗余情況都不容樂觀。接下來的部分,我會簡單的分享一下如何才能高效的設(shè)計非標準工作流。

三、如何設(shè)計高效的非標準工作流

設(shè)計一個后臺壓力小,操作簡單的高效非標準工作流,我總結(jié)了兩個方式:第一、將非標準工作流拆分成多個標準工作流。第二、開辟獨立與配置權(quán)限之外的工作流角色模塊。

第一、將非標準工作流拆分成多個標準工作流

一個非標準工作流固然麻煩,可是在大多數(shù)的情況下,其可以拆分為幾個標準工作流。比如,某個非標準工作流可以線性拆分為多個分支流程,并發(fā)流程與執(zhí)行、并發(fā)流程或執(zhí)行。將其每一個組合到一起,即可形成完整的工作流,那么我們就可以在系統(tǒng)中提供組合模板,讓配置者可以進行選擇,組合到一起形成一個非標準工作流。

如果是非線性的,比如可能為分支套分支,并發(fā)套并發(fā)的情況,我們可以將每一種情況都拆分成一個工作流,然后將生產(chǎn)端入口保持統(tǒng)一,每一步的不同操作可以進入不同的工作流,最終流轉(zhuǎn)的出口保持一致即可。有點類似于開發(fā)中設(shè)計模式的工廠模式。

第二、開辟獨立與配置權(quán)限之外的工作流角色模塊

一般來說,我們在配置工作流角色的時候,都是使用類似權(quán)限控制的角色,比如到這個節(jié)點角色為庫管,另一個節(jié)點角色為商管。其實換個角度想想,再說設(shè)計工作流的時候,完全可以設(shè)計一個獨立于權(quán)限之外只配置工作流的角色。

比如“分支節(jié)點角色1號”“流程角色1號”“并發(fā)或角色2號”,然后再通過窮舉法,將所需要用到的使用流程都列出來,把角色放置于節(jié)點上。這樣,一個活的需要配置的流程就變成了一個個的死流程。再將這些角色賦予權(quán)限角色。再定義一些規(guī)則:比如若沒有配置此節(jié)點的角色則此節(jié)點默認通過,將某個工作流角色配置兩個權(quán)限角色則為或操作/與操作。這樣也就解決了上述的問題。

工作流可以說是后臺 系統(tǒng)中比較復雜的一部分。即便某些系統(tǒng)中一開始沒有工作流,隨著系統(tǒng)功能的增加,也不可避免會用到工作流,所以提前了解下工作流的設(shè)計方法,對于產(chǎn)品來說很有幫助,在開始設(shè)計的階段也可以考慮將內(nèi)容設(shè)計進去以免后期維護成本過大。

專欄作家

執(zhí)迷,微信公眾號:執(zhí)迷有悟,人人都是產(chǎn)品經(jīng)理專欄作家。電商O2O領(lǐng)域,關(guān)注數(shù)碼硬件,人工智能,新聞資訊領(lǐng)域。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。

題圖來自 Pexels,基于 CC0 協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 公眾號 搜不到了?? 是換了嗎?

    來自北京 回復
  2. 工作流的設(shè)計思想我覺得還是更適合那種只是單一流程的。過于復雜的還是根據(jù)業(yè)務(wù)邏輯或者功能模塊劃分更好。

    回復
    1. 111111111111111

      來自福建 回復
  3. 想請教一下如果流程之外的人為的不可控的因素,該如何考慮這方面的設(shè)計呢

    來自上海 回復
  4. 牛人!

    來自北京 回復
  5. 大牛啊,點贊,收藏了!

    來自浙江 回復
  6. 太棒了,都是很使用的東西

    來自北京 回復
  7. 感覺通用的工作流引擎不應(yīng)該干涉權(quán)限的分配以及節(jié)點的規(guī)則。節(jié)點的規(guī)則判斷、前置、后置事件均由規(guī)則引擎處理。普通節(jié)點由角色和角色的權(quán)限組成,角色和權(quán)限均由權(quán)限系統(tǒng)管理。表單由表單參數(shù)即表單的各個區(qū)域和表單操作組成,通過將表單與權(quán)限關(guān)聯(lián)實現(xiàn)表單與節(jié)點相關(guān)聯(lián)

    來自浙江 回復
  8. 內(nèi)容不錯,錯別字有點多了,望先校對一下。

    來自上海 回復
  9. 關(guān)注我的公眾號“執(zhí)迷有悟”,回復“工作流”,獲得工作流狀態(tài)案例資料~

    來自北京 回復
    1. 感覺寫得很明白,關(guān)注了,收藏了。

      來自安徽 回復