剑弑 发表于 2019-3-13 23:12:56

重构之隐藏"委托关系"(HideDelegate)

       隐藏"委托关系"(HideDelegate),很多人都会被"委托"二字欺骗,认为这是关于隐藏委托的一种重构手法。其实不是的,隐藏"委托关系"(HideDelegate)是减少对象信息的公开。特别是在对类进行封装时,使用的一种重构手法。
       我们来看这样的一个例子,有两个类,一个代表着“人”的PerSon和代表着"部门"的Department。
    class Person
    {
      private Department _department;

      public Department Department { get; set; }
    }

class Department
    {
      private string _chargeCode;

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

      public Person getManager()
      {
            return _managet;
      }
    }
如果客户要知道某人的经理是谁,他就必须要先取得Department对象;这样就客户就会知道Department类包含一项“追踪经理”这条信息,但其实我们是没必要让客户知道Department类具有这样的功能。哪么我们要怎样做才能对客户隐藏Department呢?
客户要知道某人的经理是谁,直接问当事人是最快,同时也不会知道Department类的存在,所以我们在person类中加入getModerager()委托函数。

   class Person
    {
      private Department _department;

      public Department Department { get; set; }

      public Person getModerager()
      {
            return _department.getManager();
      }
    }
这样我们不就可以对客户隐藏Department类咯,从而也减少了耦合度。

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



ibcadmin 发表于 2019-3-14 09:40:23

{:3_51:}{:3_51:}{:3_51:}

剑弑 发表于 2019-3-14 11:08:14

ibcadmin 发表于 2019-3-14 09:40


有时我都不知道自己在写什么{:2_28:}
页: [1]
查看完整版本: 重构之隐藏"委托关系"(HideDelegate)