時間:4月16日 地點:大鳥的房間 人物:大鳥、小菜
大鳥給小菜出了一個題目,做一個收銀軟體。小菜用WF4不到二十分鐘寫出了第一個版本,功能也非常的簡單,如下:
定義一個ProductItem類和Order類,如下:
<a></a>
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 };
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();
9 item2.ProductName = "外套";
10 item2.ProductPrice = 200;
11 item2.ProductNumber = 1;
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一個很大的優點,就是使用者能夠定制化。文章可以擴充一個形象的流程設計器,這樣使用者就可以随便修改自己超市的收銀規則了。
大話設計模式是寫得很精彩,這裡我推薦一下,如果文章有點意思,謝謝推薦一下。:)
本文轉自麒麟部落格園部落格,原文連結:http://www.cnblogs.com/zhuqil/archive/2010/04/16/WF4CashRegister.html,如需轉載請自行聯系原作者