剑弑 发表于 2019-3-14 22:46:29

重构之移除中间人(RemoveMiddleMan)

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

   public Department Department { get; set; }

   public Person getModerager()
   {
         return _department.getManager();
   }
}
class Department
   {
       private string _chargeCode;

       private Person _managet;
      
       public Department(Person manager)
       {
         _managet = manager;
       }

       public Person getManager()
       {
         return _managet;
       }
   }

重构后
class Department
   {
       private string _chargeCode;

       private Person _managet;
      
       public Department(Person manager)
       {
         _managet = manager;
       }

       public Person getManager()
       {
         return _managet;
       }
   }

参考文献
重构——改善既有代码的设计   【美】Martin Fowler 著
                                                                         熊节 译


ibcadmin 发表于 2019-3-15 14:22:57

{:3_62:}{:3_62:}{:3_62:}{:3_62:}

wscuw 发表于 2019-8-2 14:37:13

完全支持你,大家都会顶你











static/image/common/sigline.gif
中国2019年合法代怀孕
页: [1]
查看完整版本: 重构之移除中间人(RemoveMiddleMan)