代码重构:中间人(Middle Man)
【摘要】 什么是中间人(Middle Man)定义:一种过度使用委托(某类中一半以上方法都委托给其他类)的代码[1]影响:当需求发生某些变化的时候,作为中间人的代码总会被牵连一并修改,代码越发臃肿改进目标:减少委托方法:移除中间人、内联、以继承取代委托(旧版)、以委托取代超类/子类(新版)注[1]:其中的“一半以上”并非一个绝对的衡量值,在日常开发中,我们可基于代码实际业务含义、以及自身对代码的容忍...
什么是中间人(Middle Man)
-
定义:一种过度使用委托(某类中一半以上方法都委托给其他类)的代码[1]
-
影响:当需求发生某些变化的时候,作为中间人的代码总会被牵连一并修改,代码越发臃肿
-
改进目标:减少委托
-
方法:移除中间人、内联、以继承取代委托(旧版)、以委托取代超类/子类(新版)
-
注[1]:其中的“一半以上”并非一个绝对的衡量值,在日常开发中,我们可基于代码实际业务含义、以及自身对代码的容忍程度做判断其中的“一半以上”并非一个绝对的衡量值,在日常开发中,我们可基于代码实际业务含义、以及自身对代码的容忍程度做判断
-
注[2]:旧版以及新版重构一书中也提到了以继承取代委托,以委托取代超类或子类,实际工作中对中间人消除效果有限,此次课程暂不展开
案例1
代码背景
- 描述了部门及员工的数据模型;
- 员工和部门信息,以员工为入口可以获取当前部门信息
症状/问题
- 通过中间人委托调用department里面的方法,且占department类中方法数目超过一半
- 如果这里增加一个字段,则需要在employee类中一并添加委托,修改成本较大。同时employee类会越来越臃肿
重构目标
- 减少Employee中的委托
代码背景
- 一个快递披萨的场景,当运送时间大于30分钟则需要赔付2元钱,小于30分钟,这不赔付
症状
-
“不干实事”的方法:
-
只返回属性,可以inline
重构对比(案例1)
重构前
- 通过中间人委托调用department里面的方法,且占department类中方法数目超过一半
重构后
- 使用Remove Middle Man方法,直接返回Department对象,调用方直接使用Department相关方法获取所需信息,将Employee类中的委托函数全部去除掉,简化代码。
重构对比(案例2)
总结
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)