程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> WF4.0實戰(二):超市收銀軟件

WF4.0實戰(二):超市收銀軟件

編輯:關於.NET

今天翻到了伍迷前輩的大話設計模式中的《第二章 商場促銷-策略模式》。我感覺用WF去實現,比較簡單直觀,我很喜歡做簡單的事情 。故使用了伍迷前輩書中的兩個主要人物小菜和大鳥,寫下這篇博客。

時間:4月16日        地點:大鳥的房間    人物:大鳥、小菜

大鳥給小菜出了一個題目,做一個收銀軟件。小菜用WF4不到二十分鐘寫出了第一個版本,功能也非常的簡單,如下:

定義一個ProductItem類和Order類,如下:

1   public class ProductItem
2     {
3       public   decimal ProductPrice
4        {
5           get;
6           set;
7       }
8       public int  ProductNumber
9       {
10           get;
11           set;
12       }
13       public string ProductName
14       {
15           get;
16            set;
17       }
18 
19     }
20 
21   public class Order
22   {
23        public Order()
24       {
25           ProductList = new List<ProductItem> ();
26        }
27       public List<ProductItem> ProductList
28       {
29            get;
30           set;
31       }
32   }

設置處理流程:

實例測試: 

1         Order myOrder = new Order();
2             ProductItem item1 = new  ProductItem();
3             item1.ProductName = "蘋果";
4              item1.ProductPrice = 5;
5             item1.ProductNumber = 2;
6              myOrder.ProductList.Add(item1);
7 
8             ProductItem item2 = new ProductItem();
9              item1.ProductName = "外套";
10             item1.ProductPrice = 200;
11              item1.ProductNumber = 1;
12             myOrder.ProductList.Add(item2);
13              // create dictionary with input arguments for the workflow
14              IDictionary<string, object> input = new Dictionary<string, object>
15              {
16                 { "Order" , myOrder }
17             };
18 
19              // execute the workflow
20             IDictionary<string, object>  output
21                 = WorkflowInvoker.Invoke(new CashRegister2(), input);
22 
23              // Get the TotalAmount returned by the workflow
24             decimal total  = (decimal)output["totalPrices"];
25
26             Console.WriteLine("工作流返回的總金額 為:"+total.ToString());
27             Console.Read();

運行結果:

大鳥看了之後,說如果我要增加一個全部產品打8折的功能,你去修改一下。

小鳥思考片刻,在流程上加上一個打折的變量:

修改流程,加入如下節點:

大鳥看了之後,說我要八折、七折、五折、滿300送100、滿200送50...,你再去修改一下

小菜思考片刻後,在類Order中加入一個屬性,如下:

1       public string CashMethod
2       {
3           get;
4            set;
5       }

在流程中加入一個同名的輸入參數:CashMethod,如下。

修改流程,添加一個switch活動用於判斷:

使用:

1    Order myOrder = new Order();
2             ProductItem item1 = new ProductItem ();
3             item1.ProductName = "蘋果";
4             item1.ProductPrice =  5;
5             item1.ProductNumber = 2;
6             myOrder.ProductList.Add (item1);
7
8             ProductItem item2 = new ProductItem();
9              item2.ProductName = "外套";
10             item2.ProductPrice = 200;
11              item2.ProductNumber = 1;
12             myOrder.ProductList.Add(item2);
13              myOrder.CashMethod = "滿200返回50";
14             // create dictionary with input arguments for  the workflow
15             IDictionary<string, object> input = new Dictionary<string,  object>
16             {
17                 { "Order" , myOrder }
18              };
19
20             // execute the workflow
21              IDictionary<string, object> output
22                 = WorkflowInvoker.Invoke(new  CashRegister3(), input);
23
24             // Get the TotalAmount returned by the  workflow
25             decimal total = (decimal)output["totalPrices"];
26
27              Console.WriteLine("工作流返回的總金額為:"+total.ToString());
28             Console.Read ();

得到如下輸出的結果:

小鳥說:“現在,無論你如何改需求,我只要用WF4.0設計器,手動簡單地拖拉控件定制流程,再稍稍調整一下代碼,就OK了,呵呵。”

大鳥好好表揚了一番小鳥。連說“不錯,不錯”。

總結:

這篇文章體現了WF一個很大的優點,就是用戶能夠定制化。文章可以擴展一個形象的流程設計器,這樣用戶就可以隨便修改自己超市的 收銀規則了。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved