代码重构:冗赘的元素(Lazy Element)

举报
孙小北 发表于 2022/04/29 23:33:48 2022/04/29
【摘要】 什么是冗赘的元素(Lazy Element)定义:冗赘的元素主要包括由于过度设计或在代码演进过程中,产生的冗余、废弃[1]或不足以独立承担其职责的类、方法、变量等影响:代码不简洁,存在多余的元素,造成在维护时无用修改,难以维护,影响代码的可读性。改进目标:消除冗赘的程序元素,提高代码的可读性、可维护性。方法•内联函数或内联类•如果这个类处于一个继承体系中,可以使用折叠继承体系•安全删除冗余...

什么是冗赘的元素(Lazy Element)

  • 定义:冗赘的元素主要包括由于过度设计或在代码演进过程中,产生的冗余、废弃[1]或不足以独立承担其职责的类、方法、变量等

  • 影响:代码不简洁,存在多余的元素,造成在维护时无用修改,难以维护,影响代码的可读性。

  • 改进目标:消除冗赘的程序元素,提高代码的可读性、可维护性。

  • 方法
    •内联函数或内联类
    •如果这个类处于一个继承体系中,可以使用折叠继承体系
    •安全删除冗余元素。

  • 注[1]:《重构》一书中冗赘的元素定义中并未包含冗余、废弃的代码,但在公司代码中冗余、废弃等问题较为常见,故此处一并列出。

案例

代码背景

  • 简化的房屋信息处理模型,可为购房者提供房屋面积、单价、总价、首付款、房龄等相关信息
  • 旧版本系统使用的房屋数据模型,当前业务中未使用
  • 当前系统使用的房屋数据模型,包含单价、面积、竣工时间,以及对应的get方法
  • 封装了房屋数据处理方法的类
  • 专门处理大房子信息的类,设计之初曾拥有很多职责,演进过程中其他功能逐渐删除,当前只剩判断是否是大房子的方法

image-20220429184321644.png

症状/问题:存在废弃或冗余的代码,会增大阅读和维护成本,包括

  • 存在旧版系统中使用的类、方法、字段,当前版本既然已确定不再使用,就应当及时删除
  • 出于对“未来可能使用”的考虑引入的参数,但当前实际代码中并不会使用,应当删除,避免歧义

重构目标

  • 删除冗余的代码,降低维护成本

重构手法

  • 安全删除
    image-20220429184517631.png

症状/问题

  • 类、方法过于简单,不足以独立承担业务所需的职责,使不必要的调用链变长,业务不内聚,包括

  • 单纯的数据类HouseData,无状态信息,除了给House提供需要操作的完整数据外,无其他任何用途

  • 方法名和方法体几乎一模一样,没有存在的价值

重构目标

  • 使用内联,消除不足以独立承担职责的类、方法等,减少委托,使代码更简洁,对象更富血,功能更内聚

重构手法

  • 内联类
  • 内联函数

image-20220429184717426.png

症状/问题

  • 设计之初的继承体系,在演进过程中逐渐退化,当前仅剩的父类或子类不再有独立的价值,仅会增加维护负担
  • House仅存在BigHouse一个实现类,且BigHouse中除了一个简单的bool方法外,没有其他任何业务特性,没有体现出继承体系的价值

重构目标

  • 合并子类和父类,消除继承关系,降低维护成本

重构手法

  • 折叠继承体系

image-20220429184815979.png

相关识别技巧

  • 对于代码中一些未使用的类、方法、字段、参数等,可以基于IDEA——Analyze的冗余代码识别进行辅助判断。对于可能冗余的类和方法会以浅底色标注出来

  • 也可以直接在IDEA的Analyze——Inspect Code——Declaration redundancy中,批量发现冗余代码,然后再结合人工进行判断

  • CodeCheck等工具,可以扫描出废弃代码,日常开发中需要及时整改

注:

  • [1]工具只能识别代码上的“废弃”和“冗余”,设计上的冗赘元素(如继承等)无法识别,需要人工结合经验判断
  • [2]工具只能辅助识别冗余代码,能快速定位到可能出现的问题,但是否修改还需要人工判断,如RMI、网络接口及不常用的开源第三方借助AOP等调用的类、方法,IDEA的Analyze功能无法准确识别
    CodeCheck等工具,可以扫描出废弃代码,日常开发中需要及时整改

image-20220429185018491.png

总结

image-20220429185046392.png

  • 注[1]:《重构》一书中冗赘的元素定义中并未包含冗余、废弃的代码,但在日常代码中冗余、废弃等问题较为常见,故此处一并列出。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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