程式設計模型本質分析
結構是面向對象的,執行是面向過程的。
- 靜態結構:類別 → 組件 → 子系統 (OO 組織,利於複用、設計模式控制變化)
- 動態執行:Main() 入口 → 方法呼叫鏈 → 控制流程 (if/while/呼鏈)
如消化系統:細胞構成器官 (OO 結構),器官協作完成「進食」功能 (過程控制)。
過程控制模型演進
| 模型 | 特點 | 代表技術 |
| 程式碼控制流 | 硬編碼、難擴展、阻塞執行緒 | C# if/while/foreach |
| 宣告式標記 | 分離邏輯與代碼、可視化、版本化 | XAML, XOML |
| 資料庫驅動 | 動態修改、持久化原生、適合長流程 | 狀態表、轉移表 |
| 領域專用語言 | 業務語義豐富、業務人員可讀 | DSL, BPMN, 圖形化工具 |
C# 控制流的困境:長期執行與互動
- 等待外部訊號可能持續天/週
- 傳統做法:新建執行緒阻塞等待 → 執行緒耗盡、擴展性差
- WF 解法:書籤機制 — 執行到等待點建立書籤、持久化、釋放執行緒;收到訊號喚醒繼續
- 書籤可結合 Observer 模式 + Delegate 實現
- WF 執行緒模型 = 天然非同步調用,完美解決長期等待問題
工作流模式完整圖譜 (基於 Petri Net 21 種模式)
基本模式 (5 種)
| 模式 | 說明 | 範例 |
| 循序 | 活動 B 待活動 A 完成後才能開始 | 訂單登記 → 客戶通知 |
| 平行分支 | 一控制執行緒分為二,同時執行 | 並行審核 |
| 同步 | 合併兩平行執行緒,等待兩者完成 | 雙主管簽核 |
| 單選 | 多路徑選一執行 | 金額大小分流 |
| 簡單合併 | 合併二選一路徑 | 分流後匯聚 |
高級分支與同步 (5 種)
- 多選:從多路徑選出數條並行
- 同步合併:合併多路徑,若多條被選則同步,單條則簡單合併
- 多重合併:合併多路徑 (不同步)
- 鑑別器:合併多路徑不同步,後續活動只執行一次
- M-of-N:部分同步,只執行一次後續活動
結構模式 (2 種)
多實例模式 (4 種)
(資料參數化、設計時多實例、運行時多實例...)
狀態基礎模式 (3 種)
- 推遲選擇:兩可選執行緒執行一,哪條被執行是隱含的
- 交替平行:兩活動可任意順序執行,但不可並行
- 里程碑:里程碑到達時觸發活動
取消模式 (2 種)
參考資源
完整 21 種模式詳解:Petri Net 工作流模式中文詳解