首先再次說明一下我的想法:
根據 [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作為應用系統的一部分,並為之提供對各應用系統有決定作用的根據角色 分工和條件的不同決定資訊傳遞路由 內容等級等核心解決方案。例如開發乙個系統最關鍵的部分不是系統的介面,也不是和資料庫之間的資訊交換,而是如何...