zoukankan      html  css  js  c++  java
  • WF4.0实战(二):超市收银软件

        今天翻到了伍迷前辈大话设计模式中的《第二章 商场促销-策略模式》。我感觉用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<stringobject> input = new Dictionary<stringobject> 
    15             {
    16                 { "Order" , myOrder }
    17             };
    18 
    19             // execute the workflow
    20             IDictionary<stringobject> 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<stringobject> input = new Dictionary<stringobject> 
    16             {
    17                 { "Order" , myOrder }
    18             };
    19 
    20             // execute the workflow
    21             IDictionary<stringobject> 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



    (全文完)


    以下为广告部分

    您部署的HTTPS网站安全吗?

    如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!

    SSL检测评估

    快速了解HTTPS网站安全情况。

    安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。

    SSL证书工具

    安装部署SSL证书变得更方便。

    SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。

    SSL漏洞检测

    让服务器远离SSL证书漏洞侵扰

    TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。

  • 相关阅读:
    java中获取类资源的不同姿势
    Jdk动态代理与Cglib动态代理
    Spring AOP
    Spring Ioc、DI
    windows 8.1 专业版 visual stuido 2015 安装失败
    win7 共享需要密码问题
    protobuffer .net 序列化
    【转载】SQL Server 2005数据库用户权限管理的设置
    【转载】mongoDB基本使用手册
    【转载】Thread.sleep(0)的意义
  • 原文地址:https://www.cnblogs.com/zhuqil/p/WF4CashRegister.html
Copyright © 2011-2022 走看看