2 工作流的實現

2021-04-14 16:35:42 字數 1495 閱讀 1476

首先再次說明一下我的想法:

根據 [1]幾天狂想的成果:工作流的定義與模型  對工作流的描述:

workflow :<&step>

step : <

steps , branches , waits>

branch:

wait:

為了便於實現,進一步抽象出 action作為乙個動作,它執行乙個動作並返回乙個結果。乙個步驟也是乙個動作,但在動作的基礎上多了前提條件等待和分支控制限制。

一、 下面給出了幾個核心型別定義:

1.動作狀態、引數和結果的定義

2.分支定義

3.動作和步驟的定義

需要說明的是action.do()方法,它的實現者根據param決定怎麼執行乙個動作,並返回乙個結果。而action的繼承者step的do()方法,它除了根據param,還要等待waits中所有step的結果,當它返回結果前,會適時引發stepto事件以通知它的呼叫者下一步可以進行哪些step的執行。實現以上介面,已經可以做工作流的開發了,一些取決於do方法的實現。而iresult和iparam則是為了讓action能處理所有的型別。

舉個例子說明iaction的靈活性:

public partial class actionform : form , jclib.workflow.iaction

}param _param = null;

public jclib.workflow.iparam param set }

public jclib.workflow.iresult do()

}那麼在這個窗體執行期間,可以做任意的事情,直到生成合適的result,在關閉窗體後,結果也隨之返回給呼叫者。呼叫者根據結果去判斷應該做哪些後續的事情,對於step也是一樣道理,不同的是do方法可能會判斷它的先決條件是否成立,否則拒絕執行該窗體並返回乙個空結果。

二、 為了方便,寫了一些抽象類實現了介面中一些通用的操作,以減少實現者的**量。

1.動作和步驟

2.引數和結果

3.乙個工具:activator

這些抽象類沒有什麼特別的地方。

要注意的是activator,它是乙個工具類,且具有一系列的靜態方法如do,它可以根據傳入的引數利用反射去執行乙個action或step。這是令人激動乙個亮點:可以動態載入指定的程式集並有選擇地去執行裡邊的步驟或方法!

看一下下面的**:

jclib.workflow.iresult result = jclib.workflow.action.do(typeof(actiontest).assembly, "jclibtester.actionform");

messagebox.show(result.resultcode + " " + result.resultinfo);

它將乙個動態執行乙個action,並將結果顯示出來。

actiontest是當前的窗體,而

actionform也恰巧在當前執行的程式集裡

。如果目標型別不當前程式集中,則可以通過動態引導程式集的方法來載入。

工作流建模 工作流概念

工作流建模 工作流概念 1 案例 工作流系統得基本目的是處理案例。每個案例都有乙個唯一標識,而且每個案例的生命週期都是有限的。案例生命週期都處於某個特定狀態,該狀態由三個元素組成 1 案例相關的屬性的值 案例屬性是一系列同案例相關的變數。能夠用來管理案例。正是通過這些變數,才有可能指出在特定條件下某...

工作流 一 什麼是工作流

什麼是工作流 工作流的英文全稱是 workflow,簡單理解則是業務流程的計算機化或自動化。它是是針對工作中具有固定程式的常規活動而提出的乙個概念,通過將工作活動分解定義良好的任務 角色 規則和過程來進行執行和監控,達到提高生產組織水平和工作效率的目的。工作流技術發端於70年代中期辦公自動化領域的研...

工作流 二 什麼是工作流引擎

什麼是工作流引擎 工作流引擎的英文全稱是 workflow engine,是指workflow作為應用系統的一部分,並為之提供對各應用系統有決定作用的根據角色 分工和條件的不同決定資訊傳遞路由 內容等級等核心解決方案。例如開發乙個系統最關鍵的部分不是系統的介面,也不是和資料庫之間的資訊交換,而是如何...