wf是什麼,許多對net技術有了解的人能說出一點,但又說不清楚
不論你認為wf是什麼,但不要與jbpm ,shark ,biztalk,sharepoint 這些產品做比效,這些產品有共同的特點就是面向企業業務流程應用的產品,wf不是,wf面向的開發人員
wf是乙個使用xml描述,具有ioc、aop功能的面向流程控制的開發平台.
我從事工作流開發有8年了,學習wf已經有5年了,在寫關於
wf的主題部落格也快4年了
,自從接觸
wf後我一直在解釋
wf與傳統工作流之間的區別
,以下是這方面的一些文章 wf
不是工作流
2007-05-17
wf不是工作流(後續
) 2007-05-18
再談wf
2007-07-20wf與
windows
作業系統的對比
2008-06-14
我們為什麼需要
wf 2009-02-20
可能是我即從事工作流開發,從學習wf,同時又用wf開發工作流,所以使很多看我部落格的人誤認為
wf就是象
jbpm ,shark ,biztalk,sharepoint 這些產品一樣專門用來開發企業業務流程的.
如果是開發com+的朋友,看了今天的例子,會發現這個例子的思路與用com+構建資料邏輯層非常像.
其實wf3.x + wcf 就是一種替代com+ 的方案, 但到了wf4.0 有些變化,ms提供了獨立的服務用於發布wcf與wf,這種方式比wf3.x + wcf更象com+了,這些內容我以後再寫乙個系列,下面看本文的例子
專案說明
資料庫,在wfwcf.rar檔案中
一般在構建企業應用時,會構建乙個[資料邏輯層].通常的結構如下
本例將用乙個簡單的例子講解一下基於wf與wcf構建[資料邏輯層]
這是乙個簡單的資料庫,但這個結構基本上是所用企業應用資料的初級模型
對資料操從本質上講就是對錶的[增,查,刪,改],其實對乙個單錶的[增,查,刪,改]是很簡單的,
我通常將傳統sql[增,查,刪,改]方式操作乙個表的工作量定為 ( 1 * 表的字段個數)
如果有10無關係張表,工作量就為 ( 1 * 表1的字段個數) + ( 1 * 表2的字段個數) ...( 1 * 表10的字段個數)
這種工作是簡單的,其實如果真的是這樣的結構,我就不構建[資料邏輯層]了,直接ui 到 資料庫,乙個頁面對一張表.
然而事實上表與表之間存在乙個叫(關係/約束)的東西,現在問題複雜了
假設[表a.id] 約束 [表b.id]
那處理表[表a]時,要考慮[表b] ,處理表[表b]時,要考慮[表a] ,最大的問題是當新增[表a.id] 約束 [表c.id]時,之前為處理表[表a]的業務邏輯還要加入處理 [表c]的.
很多時候,真正處理資料的**很簡單,大量的時間都浪費在(關係/約束)的判斷上
在本例將,我將對資料庫的操作變為獨立的單錶[增,查,刪,改]操作,將(關係/約束)的判斷交給wf去做
tabb表的類結構
[datacontract()]
public
class
tableb
[datamember()]
public
string id
[datamember()]
public
string value
}以下是幾個方法
public
static
class
dbmanage
'", id);
object obj = command.executescalar();
con.close();
if (obj==null)
else}}
//表[tabb]
中是否存在指定
[rowid]
的記錄public
static
bool checkrowidintabb(string rowid)
'", rowid);
object obj = command.executescalar();
con.close();
if (obj == null)
else}}
//向表
[tabb]
中新增記錄
public
static
void inserttabb(tableb row)
','','')", row.rowid, row.id, row.value);
command.executenonquery();
con.close();}}
}(看了這段**,可能有人會說對資料庫操作不加異常捕獲,不加事務,不加鎖定嗎,因為是例子,所以省略了嗎.答案是異常捕獲,事務,鎖定都在wf中設計)
只有上面的**,是無法直接使用inserttabb(tableb row),因為rowid,與id
可能存在潛在的鍵衝突所以[
向表[tabb]
中新增記錄
]我們要做如下業務邏輯判斷
新增以下變數
新增乙個流程圖
流程設計參照[
向表[tabb]
中新增記錄
]我們要做的業務邏輯判斷
可以使用asp.net , winform ,wpf ,silverlight , 本例中使用wpf
在wpf客戶端新增對上面wcf服務的引用
ui設計
**private
void button1_click(object sender, routedeventargs e)
關於異常捕獲,事務,鎖定
wf提供了這些容器,具體的使用可參考我寫的[wf4.0 基礎篇]這個系列
本例只是在[flowchar]的最外層新增了乙個異常捕獲,
WF是什麼系列之 WF控制邏輯線路的演算法
本文以控制一組邏輯線路開關為例演示wf在演算法上的應用,另外本文是結合 規則引擎 大家可以狠好的比效一下c 狀態機 規則引擎,流程圖在流程控制與演算法上的各自特點 本文的應用場景的演算法例子,我以前曾經發過,規則引擎 在 規則引擎 一文中,我分別用c wf3.x 的狀態機工作流 wf3.x 的規則引...
WF是什麼系列之 WF控制邏輯線路的演算法
本文的應用場景的演算法例子,我以前曾經發過,規則引擎 在 規則引擎 一文中,我分別用c wf3.x 的狀態機工作流 wf3.x 的規則引擎 三種方式實現 本文則以 wf4.0 的流程圖方式實現,1.y 裝置啟動要先啟動 x裝置,x裝置關閉要先關閉y裝置 2.n 裝置啟動要先啟動 m裝置,m裝置關閉要...
《WF程式設計》系列之13 XAML啟用
在有些環境中,編譯過程會變成一種負擔.想象一下,資料庫中包含了上千個為特定使用者量身打造的工作流定義.在這種情形下,我們也許想要避免總是建立新的程式集而引起的效能消耗.而我們需要的就是以最低的開銷載入工作流,然後執行.幸運的是,這正是以純xaml方式編寫工作流的優點.如果要啟用之前建立的工作流,我們...