博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WF4.0实战(二):超市收银软件
阅读量:6154 次
发布时间:2019-06-21

本文共 2916 字,大约阅读时间需要 9 分钟。

今天翻到了的中的《第二章 商场促销-策略模式》。我感觉用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一个很大的优点,就是用户能够定制化。文章可以扩展一个形象的流程设计器,这样用户就可以随便修改自己超市的收银规则了。

大话设计模式是写得很精彩,这里我推荐一下,如果文章有点意思,谢谢推荐一下。:)

本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/04/16/WF4CashRegister.html,如需转载请自行联系原作者

你可能感兴趣的文章
如何进行数组去重
查看>>
将标题空格替换为 '_' , 并自动复制到剪切板上
查看>>
List Collections sort
查看>>
Mysql -- You can't specify target table 'address' for update in FROM clause
查看>>
使用局部标准差实现图像的局部对比度增强算法。
查看>>
2017-2018-1 20165313 《信息安全系统设计基础》第八周学习总结
查看>>
《代码敲不队》第四次作业:项目需求调研与分析
查看>>
菜鸡互啄队—— 团队合作
查看>>
HttpWebRequest的GetResponse或GetRequestStream偶尔超时 + 总结各种超时死掉的可能和相应的解决办法...
查看>>
SparseArray
查看>>
第二章
查看>>
android背景选择器selector用法汇总
查看>>
[转]Paul Adams:为社交设计
查看>>
showdialog弹出窗口刷新问题
查看>>
java
查看>>
Vue.js连接后台数据jsp页面  ̄▽ ̄
查看>>
关于程序的单元测试
查看>>
mysql内存优化
查看>>
都市求生日记第一篇
查看>>
Java集合---HashMap源码剖析
查看>>