请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

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

  [复制链接]
查看2762 | 回复5 | 2019-3-13 23:12:56 | 显示全部楼层 |阅读模式
       隐藏"委托关系"(HideDelegate),很多人都会被"委托"二字欺骗,认为这是关于隐藏委托的一种重构手法。其实不是的,隐藏"委托关系"(HideDelegate)是减少对象信息的公开。特别是在对类进行封装时,使用的一种重构手法。
       我们来看这样的一个例子,有两个类,一个代表着“人”的PerSon和代表着"部门"的Department。
[AppleScript] 纯文本查看 复制代码
    class Person
    {
        private Department _department;

        public Department Department { get; set; }
    }

[C#] 纯文本查看 复制代码
 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()委托函数。
[C#] 纯文本查看 复制代码
   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 | 显示全部楼层
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
剑弑 | 2019-3-14 11:08:14 | 显示全部楼层

有时我都不知道自己在写什么
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则