首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WF 從入門到精通(第十二章):策略與規則引擎深度解析

     編輯:關於.NET

核心學習目標

本章將引導您掌握 Windows Workflow Foundation (WF) 中基於規則的處理機制,重點包括:

  • 理解工作流處理過程中策略與規則的運作原理
  • 掌握前向鏈接機制及其對基於規則工作流的影響
  • 學會為工作流創建與管理規則條件
  • 熟練運用 Policy 活動整合複雜規則集

從命令式代碼到聲明式規則的思維轉變

大多數開發者翣慣編寫命令式代碼——透過 C# 明確指定業務邏輯的每一步執行順序,例如讀取資料庫、計算數值、寫入結果。然而,當業務規則變得複雜且多變時,巢狀的 if-else 與 switch 語句會使代碼難以維護、擴展與重用。

WF 提供了聲明式規則引擎,讓您以「如果條件則動作」的規則集合描述業務邏輯,而非硬編碼執行步驟。規則在運行時由引擎解釋執行,支援動態修改,無需重新編譯部署,極大提升了業務邏輯的靈活性。

規則與策略的核心概念

什麼是規則?

WF 中的規則遵循 IF 條件 THEN 動作 ELSE 動作 結構,條件返回布林值,動作可包含多個操作。規則引擎負責評估條件並根據結果執行對應動作。規則以 XML 形式儲存,編譯為資源嵌入組件。

什麼是策略?

策略是規則的集合,封裝在 RuleSet 物件中。策略支援優先級、啟用狀態與前向鏈接控制,使多規則協同工作成為可能。

前向鏈接:規則間的動態依賴與重新評估

前向鏈接是指規則評估結果導致狀態變更,進而觸發其他依賴規則重新評估的機制。WF 提供三種鏈接模式:

模式說明
隱式鏈接引擎自動偵測規則間共享欄位/屬性的讀寫依賴
屬性聲明鏈接透過 [RuleWrite]、[RuleRead]、[RuleInvoke] 屬性明確標記方法對欄位的影響
顯式鏈接在規則中使用 Update("欄位名") 語句手動通知引擎狀態已變更

此外,可透過 Full Chaining(預設)、Explicit Chaining、Sequential 三種控制行為微調鏈接範圍,並以 Always(預設)或 Never 重新評估模式防止無限循環。

規則條件:替換傳統代碼條件

IfElse、While、Replicator、ConditionedActivityGroup 等活動原本使用代碼條件(事件處理器返回 ConditionalEventArgs.Result)。現在可改用聲明性規則條件,直接在設計器中編寫如 System.DateTime.Now.DayOfWeek == System.DayOfWeek.Tuesday 的運算式,支援關係、算術、邏輯運算子與關鍵字(IF/THEN/ELSE/HALT/Update)。

優勢在於規則外部化,可在運行時熱替換,無需重新部署組件。

Policy 活動:複雜業務規則的編排器

當單一規則不足以表達業務邏輯時,Policy 活動登場。它承載一個 RuleSet,透過專用編輯器批量管理規則,設定優先級、鏈接行為與重新評估模式。本章以塑膠製造商訂單處理為例,示範如何將四條業務規則封裝為策略:

  1. 檢查庫存增塑劑是否足夠完整出貨,否則準備部分出貨
  2. 部分出貨時檢查客戶是否接受(Tailspin 接受,Wingtip 拒絕)
  3. 完整出貨前再次核對實際儲罐存量(考慮揮發損耗)
  4. 實際存量不足時自動轉為部分出貨流程

實戰中,透過 CheckPlasticizer()、CheckActualPlasticizer() 方法封裝邏輯,配合 [RuleWrite("_shipQty")] 標記狀態變更,Policy 活動自動處理前向鏈接,優雅解決了「預估庫存充足但實際不足」的動態決策問題。

實戰驗證:四大場景測試

  • Tailspin 訂購 500 單位:預估可滿足,實際不足 → 部分出貨(客戶接受)
  • Tailspin 訂購 200 單位:預估與實際均滿足 → 完整出貨
  • Wingtip 訂購 500 單位:預估滿足,實際不足 → 部分出貨但客戶拒絕 → 訂單保留
  • Wingtip 訂購 200 單位:完整出貨

結果證明:基於規則的方式將原本需要大量巢狀活動的複雜邏輯簡化為幾條可維護、可熱插拔的規則,極大降低了業務變更成本。

總結與建議

WF 的規則引擎將業務邏輯與流程控制分離,支援聲明式定義、動態更新與前向鏈接自動推理。實際專案中,建議將穩定流程用命令式活動實現,將易變業務規則外部化為 Policy 活動,兩者結合達到最佳平衡。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved