天天看點

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

    時間: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&lt;ProductItem&gt;(); 

26        }

27       public List&lt;ProductItem&gt; 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&lt;string, object&gt; input = new Dictionary&lt;string, object&gt; 

15             {

16                 { "Order" , myOrder }

17             };

19             // execute the workflow

20             IDictionary&lt;string, object&gt; 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&lt;string, object&gt; input = new Dictionary&lt;string, object&gt; 

16             {

17                 { "Order" , myOrder }

18             };

19 

20             // execute the workflow

21             IDictionary&lt;string, object&gt; 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,如需轉載請自行聯系原作者

繼續閱讀