昨天我们讲了“隐藏"委托关系"(HideDelegate)”,因为了减少类信息的泄漏而要把类间的委托关系隐藏起来。但当我们建立大量委托行为后,使用“隐藏"委托关系"(HideDelegate)”的成本就非常大了;我们要记住大量的委托函数,反而不利于代码的理解、代码的可读性也相对的降低了(函数多了会造成视觉疲劳,毕竟我们每天都要看大量的代码、大量的资料),所以当我们感觉到类的委托函数有增多的趋势时,我们就要把这委托函数给去掉,我们称这种手法为"移除中间人(RemoveMiddleMan)"。 
      从上面的讲解,聪明的你一定发现了其实“隐藏"委托关系"(HideDelegate)”跟"移除中间人(RemoveMiddleMan)"刚好是相反的。我们很难说什么程度适合用“隐藏"委托关系"(HideDelegate)”,什么时候用"移除中间人(RemoveMiddleMan)";但还好我们并不用去担心这一问题,因为你可以随心所欲的进行调整,只要你觉得哪种合适就用哪种。对代码进行重构的意义就在于:你永远不必说对不起——只要把出问题的地方修补好就行。 
     代码如下,可供参考 
重构前 
[AppleScript] 纯文本查看 复制代码 class Person
 {
     private Department _department;
 
     public Department Department { get; set; }
 
     public Person getModerager()
     {
         return _department.getManager();
     }
 } 
[C#] 纯文本查看 复制代码 class Department
   {
       private string _chargeCode;
 
       private Person _managet;
        
       public Department(Person manager)
       {
           _managet = manager;
       }
 
       public Person getManager()
       {
           return _managet;
       }
   } 
 
重构后 
[C#] 纯文本查看 复制代码 class Department
   {
       private string _chargeCode;
 
       private Person _managet;
        
       public Department(Person manager)
       {
           _managet = manager;
       }
 
       public Person getManager()
       {
           return _managet;
       }
   } 
 
参考文献 
重构——改善既有代码的设计   【美】Martin Fowler 著  
                                                                         熊节 译 
 
 
 |