代码重构:中间人(Middle Man)

举报
孙小北 发表于 2022/04/29 23:47:10 2022/04/29
【摘要】 什么是中间人(Middle Man)定义:一种过度使用委托(某类中一半以上方法都委托给其他类)的代码[1]影响:当需求发生某些变化的时候,作为中间人的代码总会被牵连一并修改,代码越发臃肿改进目标:减少委托方法:移除中间人、内联、以继承取代委托(旧版)、以委托取代超类/子类(新版)注[1]:其中的“一半以上”并非一个绝对的衡量值,在日常开发中,我们可基于代码实际业务含义、以及自身对代码的容忍...

什么是中间人(Middle Man)

  • 定义:一种过度使用委托(某类中一半以上方法都委托给其他类)的代码[1]

  • 影响:当需求发生某些变化的时候,作为中间人的代码总会被牵连一并修改,代码越发臃肿

  • 改进目标:减少委托

  • 方法:移除中间人、内联、以继承取代委托(旧版)、以委托取代超类/子类(新版)

  • 注[1]:其中的“一半以上”并非一个绝对的衡量值,在日常开发中,我们可基于代码实际业务含义、以及自身对代码的容忍程度做判断其中的“一半以上”并非一个绝对的衡量值,在日常开发中,我们可基于代码实际业务含义、以及自身对代码的容忍程度做判断

  • 注[2]:旧版以及新版重构一书中也提到了以继承取代委托,以委托取代超类或子类,实际工作中对中间人消除效果有限,此次课程暂不展开

案例1

代码背景

  • 描述了部门及员工的数据模型;
  • 员工和部门信息,以员工为入口可以获取当前部门信息

症状/问题

  • 通过中间人委托调用department里面的方法,且占department类中方法数目超过一半
  • 如果这里增加一个字段,则需要在employee类中一并添加委托,修改成本较大。同时employee类会越来越臃肿

重构目标

  • 减少Employee中的委托

image-20220429201635214.png

代码背景

  • 一个快递披萨的场景,当运送时间大于30分钟则需要赔付2元钱,小于30分钟,这不赔付

症状

  • “不干实事”的方法:

  • 只返回属性,可以inline

image-20220429201915565.png

重构对比(案例1)

image-20220429201949358.png

重构前

  • 通过中间人委托调用department里面的方法,且占department类中方法数目超过一半

重构后

  • 使用Remove Middle Man方法,直接返回Department对象,调用方直接使用Department相关方法获取所需信息,将Employee类中的委托函数全部去除掉,简化代码。

重构对比(案例2)

image-20220429202131879.png

总结

image-20220429202209638.png

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。