專利名稱:基于數(shù)據(jù)來源的流程引擎設計方法
技術領域:
本發(fā)明涉及一種軟件系統(tǒng)的設計方法,特別是涉及一種流程引擎的設計方法。
背景技術:
流程引擎是一種根據(jù)外來輸入對一個或多個對象進行操作的軟件系統(tǒng)。流程引擎通?;谟邢逘顟B(tài)機(Finite State Machine)進行設計。有限狀態(tài)機又稱有限狀態(tài)自動機或簡稱狀態(tài)機,是表示有限個狀態(tài)以及在這些狀態(tài)之間的轉換和動作等行為的數(shù)學模型。流程引擎通常是針對一個或多個對象進行操作的軟件系統(tǒng)。每個對象具有一個或多個流程。每個流程包括至少兩個狀態(tài)(Mate)及狀態(tài)之間進行轉換(Transition)的條件。狀態(tài)轉換的條件是指各狀態(tài)在遇到何種外來輸入時轉換為另一狀態(tài),此時的外來輸入稱為事件(Event)。某個對象的某個流程從一個狀態(tài)轉換到另一狀態(tài),稱為一個動作 (Action)。流程引擎在同一時刻或者不調(diào)度任何流程,或者只調(diào)用一個流程?,F(xiàn)有的流程引擎的設計方法有兩種一種是基于線性調(diào)度的流程引擎設計方法,請參閱圖1,即流程引擎總是線性地進行各個動作。圖中對于事件,程序依次執(zhí)行流程1、流程2、流程3,其中,每個流程中執(zhí)行了狀態(tài)的轉換。這種方法需要窮舉所有流程的所有狀態(tài)和狀態(tài)之間進行轉換的條件,局限于非常簡單的對象操作。另一種是基于非線性調(diào)度的流程引擎設計方法,請參閱圖2,與線性方式的區(qū)別在于,支持多事件的輸入和流程非線性調(diào)度,當某一事件會引發(fā)一個或多個對象的狀態(tài)發(fā)生改變時,各個對象的動作執(zhí)行順序并非事先設定,而是由流程引擎根據(jù)當時具體的上下文關系來動態(tài)選擇的。例如當事件1發(fā)生時,流程引擎首先根據(jù)事件1對應的操作1,調(diào)用對象1的動作,對象狀態(tài)變化之后,執(zhí)行權交還流程引擎,流程引擎更新事件1的操作列表,并根據(jù)操作2,調(diào)用對象2的動作,同理,操作3,在每個操作完畢之后,流程引擎都會更新操作列表,并判斷是否事件1執(zhí)行完畢。。由此可見,這種方法不在限于流程的線性執(zhí)行順序,流程引擎決定了下一步調(diào)用的對象和它的動作。這種方法將流程調(diào)度操作分離出來,從而實現(xiàn)對象操作的非線性,可以實現(xiàn)復雜系統(tǒng)的對象操作,但是過多的對象操作會使程序設計也變得繁瑣而復雜。
發(fā)明內(nèi)容
本發(fā)明所要解決的技術問題提供一種基于數(shù)據(jù)來源的流程引擎設計方法,該方法可以適用于簡單或復雜的對象操作,也易于進行程序設計。為解決上述技術問題,本發(fā)明公開了一種基于數(shù)據(jù)來源的流程引擎設計方法,所述流程引擎操作一個或多個對象,每個對象具有一個或多個流程,每個流程包括至少兩個狀態(tài)及狀態(tài)之間進行轉換的條件;所述流程引擎設計方法包括如下步驟第1步,流程引擎歸納所有事件的來源為χ種,并為每個流程提供χ個函數(shù)接口, 每個流程的一個函數(shù)接口對應于一種事件的來源;
流程引擎啟動時,最先加載根流程;所述事件指引起一個或多個對象的一個或多個流程中狀態(tài)之間進行轉換、或一個或多個對象的一個或多個流程的創(chuàng)建、或一個或多個對象的一個或多個流程的銷毀的外部輸入;第2步,流程引擎維護當前調(diào)度的流程列表,調(diào)度該列表中的流程,添加新流程, 刪除執(zhí)行完畢的流程;第3步,當流程引擎接收到一個事件時,首先分析該事件的來源,并調(diào)用當前所調(diào)度流程中與該事件的來源相對應的函數(shù)接口,流程引擎判斷該事件是否滿足該流程中狀態(tài)之間進行轉換、或流程創(chuàng)建、或流程銷毀的條件;如果是則執(zhí)行流程中狀態(tài)之間的轉換、或流程創(chuàng)建、或流程銷毀,執(zhí)行完畢后進入第4步,如果否則直接進入第4步;第4步,流程引擎判斷該事件所需操作的一個或多個流程是否已經(jīng)全部執(zhí)行完畢,如果是則返回第3步;如果否則將該事件所需操作的一個或多個流程中尚未執(zhí)行的流程放入流程引擎所調(diào)度的流程列表之中再返回的3步。本發(fā)明基于數(shù)據(jù)來源的流程引擎設計方法可以適用于簡單或復雜的對象操作,也易于進行程序設計。
圖1是現(xiàn)有的一種流程引擎的設計方法的示意圖;圖2是現(xiàn)有的另一種流程引擎的設計方法的示意圖;圖3是本發(fā)明基于數(shù)據(jù)來源的流程引擎的設計方法的流程圖。
具體實施例方式請參閱圖3,本發(fā)明公開了一種基于數(shù)據(jù)來源的流程引擎設計方法,所述流程引擎操作一個或多個對象,每個對象具有一個或多個流程,每個流程包括至少兩個狀態(tài)及狀態(tài)之間進行轉換的條件;所述流程引擎設計方法包括如下步驟第1步,流程引擎歸納所有事件的來源為χ種,并為每個流程提供χ個函數(shù)接口, 每個流程的一個函數(shù)接口對應于一種事件的來源;流程引擎啟動時,最先加載根流程;所述事件指引起一個或多個對象的一個或多個流程中狀態(tài)之間進行轉換、或一個或多個對象的一個或多個流程的創(chuàng)建、或一個或多個對象的一個或多個流程的銷毀的外部輸入;我們定義起始流程為根流程,它是流程引擎啟動時最先加載的流程,根流程的作用就是分析事件,并生成新流程。第2步,流程引擎維護當前調(diào)度的流程列表,調(diào)度該列表中的流程,添加新流程, 刪除執(zhí)行完畢的流程;第3步,當流程引擎接收到一個事件時,首先分析該事件的來源,并調(diào)用當前所調(diào)度流程中與該事件的來源相對應的函數(shù)接口,流程引擎判斷該事件是否滿足該流程中狀態(tài)之間進行轉換、或流程創(chuàng)建、或流程銷毀的條件;如果是則執(zhí)行流程中狀態(tài)之間的轉換、或流程創(chuàng)建、或流程銷毀,執(zhí)行完畢后進入第4步,如果否則直接進入第4步;
第4步,流程引擎判斷該事件所需操作的一個或多個流程是否已經(jīng)全部執(zhí)行完畢,如果是則返回第3步;如果否則將該事件所需操作的一個或多個流程中尚未執(zhí)行的流程放入流程引擎所調(diào)度的流程列表之中再返回的3步。采用本發(fā)明的基于數(shù)據(jù)來源的流程引擎設計方法,具有如下優(yōu)點其一、系統(tǒng)簡單、高效。流程引擎只需要將當前事件提交到當前調(diào)度的流程相應的函數(shù)接口即可。流程引擎在流程執(zhí)行完畢后將其從流程調(diào)度的列表中移除。這樣的操作方法,簡單而且高效,利于開發(fā)調(diào)試,杜絕流程非法串調(diào)和混淆的現(xiàn)象發(fā)生。其二、實現(xiàn)容易,擴展性好。依據(jù)事件來源的種類來為各流程預留對應數(shù)量的函數(shù)接口,使得流程間調(diào)用不容易混淆,流程獨立性強,與事件的來源種類一一對應,當新的來源的事件發(fā)生時,直接為每個流程引入新的函數(shù)接口即可,擴展性好,采用分布式開發(fā)效率尚ο其三、適用于復雜的業(yè)務流程。本發(fā)明能在流程調(diào)度過程中引入流程自身的業(yè)務邏輯,并能實現(xiàn)流程間的調(diào)用與回溯,因此適用于各種復雜的業(yè)務流程,例如桌游系統(tǒng)、工作流程系統(tǒng)等。
權利要求
1. 一種基于數(shù)據(jù)來源的流程引擎設計方法,所述流程引擎操作一個或多個對象,每個對象具有一個或多個流程,每個流程包括至少兩個狀態(tài)及狀態(tài)之間進行轉換的條件;其特征是,所述流程引擎設計方法包括如下步驟第1步,流程引擎歸納所有事件的來源為X種,并為每個流程提供X個函數(shù)接口,每個流程的一個函數(shù)接口對應于一種事件的來源;流程引擎啟動時,最先加載根流程;所述事件指引起一個或多個對象的一個或多個流程中狀態(tài)之間進行轉換、或一個或多個對象的一個或多個流程的創(chuàng)建、或一個或多個對象的一個或多個流程的銷毀的外部輸入;第2步,流程引擎維護當前調(diào)度的流程列表,調(diào)度該列表中的流程,添加新流程,刪除執(zhí)行完畢的流程;第3步,當流程引擎接收到一個事件時,首先分析該事件的來源,并調(diào)用當前所調(diào)度流程中與該事件的來源相對應的函數(shù)接口,流程引擎判斷該事件是否滿足該流程中狀態(tài)之間進行轉換、或流程創(chuàng)建、或流程銷毀的條件;如果是則執(zhí)行流程中狀態(tài)之間的轉換、或流程創(chuàng)建、或流程銷毀,執(zhí)行完畢后進入第4步,如果否則直接進入第4步;第4步,流程引擎判斷該事件所需操作的一個或多個流程是否已經(jīng)全部執(zhí)行完畢,如果是則返回第3步;如果否則將該事件所需操作的一個或多個流程中尚未執(zhí)行的流程放入流程引擎所調(diào)度的流程列表之中再返回的3步。
全文摘要
本發(fā)明公開了一種基于數(shù)據(jù)來源的流程引擎設計方法,首先為每個流程提供與事件來源種類的數(shù)量相同的函數(shù)接口,每個函數(shù)接口對應于一種事件的來源;第2步,流程引擎調(diào)度流程、添加新流程、刪除執(zhí)行完畢的流程;第3步當一個事件發(fā)生時,流程引擎當前調(diào)度的流程通過該事件的來源所對應的函數(shù)接口,判斷該事件是否為需要該流程執(zhí)行;如果是則執(zhí)行后進入第4步,如果否則直接進入第4步;第4步,流程引擎判斷該事件所需操作的流程是否已經(jīng)全部執(zhí)行完畢,如果是則返回第3步;如果否則將該事件所需操作的尚未執(zhí)行的流程放入流程引擎所調(diào)度的流程列表之中再返回的3步。本發(fā)明可以適用于簡單或復雜的對象操作,也易于進行程序設計。
文檔編號G06F9/44GK102566998SQ20101061412
公開日2012年7月11日 申請日期2010年12月30日 優(yōu)先權日2010年12月30日
發(fā)明者施偉, 李偉 申請人:盛樂信息技術(上海)有限公司