WF是什麼系列之 基於WF與WCF構建資料邏輯層

2022-02-28 18:17:40 字數 3636 閱讀 7556

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方式編寫工作流的優點.如果要啟用之前建立的工作流,我們...