重构第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 }

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

posted @ 2016-04-07 10:44  IT少年  阅读(337)  评论(0编辑  收藏  举报