zoukankan      html  css  js  c++  java
  • 委托的实际应用场景

    关于委托的介绍,有篇文章真的不错,从简单到复杂的演变

    http://bbs.csdn.net/topics/310243288


    单凡用到委托,其业务需求必定是有点复杂,希望通过设计模式将业务分离出来。一切的设计都是去区分业务共性和特性,把握住这一点,至少不会乱用模式了。

    一般对于订单的处理都会出现以下代码:

       public  class Service1
        {
    
    
           public static void SaveOrder(int type)
           {
               
               //order.AddOrder 添加订单
               //order.AddCashLog
               if (type==1)
               {
                   //hotel.addhotelInfo  
               }
               else if (type==2)
               {
                   //ticket.addticketInfo
               }
               {
                   //...
               }
    
           }
        }

    良好的编码习惯就是要消灭if else ,降低阅读复杂度。

    然后会出现以下重构:

       public class Service2
       {
    
    
           public static void SaveHotelOrder()
           {
    
               //order.AddOrder 添加订单
               //order.AddCashLog
               //hotel.addhotelInfo  
    
           }
           public static void SaveTicketOrder()
           {
    
               //order.AddOrder 添加订单
               //order.AddCashLog
               //ticket.addticketInfo 
           }
       }

    然后第三步优化就看你对service的定义了,我对service的定义是传递数据,只做数据对象vo的拆解和组装。业务由BIZ层承担。(当然这不是绝对的,任何架构在业务面前都得低头!)

    所以service层虽然负责任务明确,但赋值代码会很多,为了能让方法变得更简洁,做了以下调整。

       public class BaseService
       {
    
    
           public static void SaveOrder(Action action)
           {
    
               //order.AddOrder 添加订单
               //order.AddCashLog
               action();
    
           }
     
       }
       public class Service3 : BaseService
       {
    
           public static void SaveHotelOrder()
           {
               SaveOrder(hotel.addhotelInfo);
           }
    
           public static void SaveTicketOrder()
           {
               SaveOrder(hotel.addhotelInfo);
           }
    
       }
      

    项目属于重构改造,由于生产项目无法分享,就写了伪代码,虽然简单,结合自身项目做个引导把。本意在于设计时考虑业务抽象,分离不同点进行特殊处理。

  • 相关阅读:
    利用阻止冒泡解决点击页面除去本身触发事件
    vijos p1304 回文数
    vijos p1484 ISBN号码
    vijos p1449 字符串还原
    vijos p1217 乒乓球
    vijos P1911 珠心算测验
    vijos p1001 谁拿了最多奖学金
    vijos P1848 记数问题
    Catalan公式
    【HDOJ】2104 hide handkerchief
  • 原文地址:https://www.cnblogs.com/yuanhuaming/p/4449434.html
Copyright © 2011-2022 走看看