• 委托的实际应用场景


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

    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);
           }
    
       }
      

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

  • 相关阅读:
    Python爬虫之Scrapy框架的简介和基础应用
    python爬虫之selenium,谷歌无头浏览器
    12.块设备驱动程序(磁盘)
    11.USB输入子系统
    10.触摸屏驱动
    9.LCD驱动架构
    8.platform驱动分离
    7.输入子系统框架
    5.标签管理
    4.分支管理
  • 原文地址:https://www.cnblogs.com/yuanhuaming/p/4449434.html
Copyright © 2020-2023  润新知