今天翻到了伍迷前辈的大话设计模式中的《第二章 商场促销-策略模式》。我感觉用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一个很大的优点,就是用户能够定制化。文章可以扩展一个形象的流程设计器,这样用户就可以随便修改自己超市的收银规则了。
大话设计模式是写得很精彩,这里我推荐一下,如果文章有点意思,谢谢推荐一下。:)
代码:/Files/zhuqil/WF2Demo.rar
作者:朱祁林
出处:http://zhuqil.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。