zoukankan      html  css  js  c++  java
  • 重构第14天 分离职责(Break Responsibilities)

    理解:面向对象的五大特征: SOLID,其中S就是职责单一原则。分离职责指当一个类有许多职责时,将部分职责分离到独立的类中,这样也符合面向对象的五大特征之一的单一职责原则,同时也可以使代码的结构更加清晰,维护性更高。

    详解:依然看下面的例子。

    befor reflector

     1 using System;
     2 using System.Collections;
     3 using System.Collections.Generic;
     4 using System.Linq;
     5 using System.Text;
     6 
     7 namespace ReflectorDemo
     8 {
     9     public class Video
    10     {
    11         public void PayFee(decimal fee)
    12         {
    13             
    14         }
    15 
    16         public void RentVideo(Video video, Customer customer)
    17         {
    18             customer.Videos.Add(video);
    19         }
    20 
    21         public decimal CalculateBalance(Customer customer)
    22         {
    23             return customer.LateFees.Sum();
    24         }
    25     }
    26 
    27     public class Customer
    28     {
    29         public IList<decimal> LateFees { get; set; }
    30 
    31         public IList<Video> Videos { get; set; }
    32 
    33     }
    34 }

    可以看到,Video类有2个职责,一个是用来处理video出租的,一个是用来处理客户租金费用的。我们可以把跟客户计算租金的职责分离出来,方法Customer类中去,更符合场景。

    after reflected

     1 using System;
     2 using System.Collections;
     3 using System.Collections.Generic;
     4 using System.Linq;
     5 using System.Text;
     6 
     7 namespace ReflectorDemo
     8 {
     9     public class Video
    10     {
    11       
    12 
    13         public void RentVideo(Video video, Customer customer)
    14         {
    15             customer.Videos.Add(video);
    16         }
    17 
    18     }
    19 
    20     public class Customer
    21     {
    22         public IList<decimal> LateFees { get; set; }
    23 
    24         public IList<Video> Videos { get; set; }
    25 
    26         public void PayFee(decimal fee)
    27         {
    28 
    29         }
    30 
    31 
    32         public decimal CalculateBalance(Customer customer)
    33         {
    34             return customer.LateFees.Sum();
    35         }
    36     }
    37 }

    这个重构经常会用到,它和之前的“移动方法”有几分相似之处,让方法放在合适的类中,并且简化类的职责,同时这也是面向对象五大原则之一和设计模式中的重要思想。

  • 相关阅读:
    C#获取当前路径
    惠普辞退4000员工,今后如何走
    提升你的编码技能,你不知道的免费在线编码资源(上)
    iPhone 5在美销量有望破5000万,Facebook手机何去何从?
    Python获取命令行参数
    C#递归获取文件目录
    Pixel’d:共创美好的像素艺术
    PayPal走向现实支付,消费者们会来买帐吗?
    兼容性测试、手工测试、自动化测试及探索性测试
    冒烟测试 smoking test
  • 原文地址:https://www.cnblogs.com/yplong/p/5362567.html
Copyright © 2011-2022 走看看