參考《大話設計模式》第 2 章策略模式範例,本文展示如何用 WF 4.0 取代傳統硬編碼策略類別,讓收銀規則(折扣、滿額贈送等)成為可視覺化設計、熱插拔的工作流。
public class ProductItem {
public decimal ProductPrice { get; set; }
public int ProductNumber { get; set; }
public string ProductName { get; set; }
}
public class Order {
public Order() { ProductList = new List<ProductItem>(); }
public List<ProductItem> ProductList { get; set; }
public string CashMethod { get; set; } // 新增:收銀方式
}
流程:ForEach<ProductItem> 累加總價。

在流程中新增變數 Discount,計算時套用。


Order 加入 CashMethod 屬性(如「滿 200 送 50」)。流程使用 Switch<string> 依據 CashMethod 分派不同計算邏輯。


Order myOrder = new Order();
myOrder.ProductList.Add(new ProductItem { ProductName="蘋果", ProductPrice=5, ProductNumber=2 });
myOrder.ProductList.Add(new ProductItem { ProductName="外套", ProductPrice=200, ProductNumber=1 });
myOrder.CashMethod = "滿200返回50";
IDictionary<string, object> input = new Dictionary<string, object> { {"Order", myOrder} };
var output = WorkflowInvoker.Invoke(new CashRegister3(), input);
decimal total = (decimal)output["totalPrices"]; // 輸出 155

此範例生動展示 WF 4.0 作為「業務規則引擎」的威力:將易變的定價邏輯外部化為工作流,達成真正的「業務與技術分離」。
本文配套原始碼已提供(下載連結請參考原文)。