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

WF 4.0 實戰(二):超市收銀系統的彈性規則引擎

     編輯:關於.NET

故事背景

參考《大話設計模式》第 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; } // 新增:收銀方式
}

版本演進

V1:單純加總

流程:ForEach<ProductItem> 累加總價。

V1 流程

V2:加入固定 8 折變數

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

V2 變數

V2 流程

V3:支援多種彈性促銷規則

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

V3 參數

V3 Switch 流程

測試執行

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

執行結果

核心優勢

  • 業務人員可自行維護規則:無需重新編譯,透過重新設計工作流即可調整促銷邏輯。
  • 版本控管與稽核:工作流定義即文件,XAML 可存入版控系統。
  • 擴充性:新增促銷型別只需在 Switch 增加分支,或開發新自訂活動。

總結

此範例生動展示 WF 4.0 作為「業務規則引擎」的威力:將易變的定價邏輯外部化為工作流,達成真正的「業務與技術分離」。

原始碼

本文配套原始碼已提供(下載連結請參考原文)。

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