异味和重构

2021/11/30

异味和重构

参考资料

一、异味&重构

  • 异味:代码不精炼,冗余,结构混乱,难读懂,难维护,难扩展等等
  • 重构:不改变软件既有外观行为,即功能(单元测试来保证),使代码更加干净整洁(clean code)(简单,易于沟通,灵活)
  • 重构:在不改变软件外观行为的的条件下,对软件内部结构的一种修改,使之更利于理解和修改,提高软件的扩展性和维护性

二、重构时机

  • 在添加新功能时进行重构。
  • 在修改bug时进行重构。
  • 在代码复查时进行重构。
  • 上线前禁止重构代码

三、重构的原因 异味:

  • 模糊的方法名:(类,接口,方法,属性等)
  • 方法过长:方法之所以会变得很长主要是有以下几个原因:
    • 许多没有关联性的、功能复杂的模块的代码都放在相同的方法内。这主要是开发者缺乏SRP(Single Responsibility)的概念;
    • 多种条件都放在同一个方法内,这在长方法内经常会发生的。这是由于缺乏圈复杂度和SRP的概念的比较;
    • 方法内不同条件分支,有功能相似的重复代码部分;
  • 传参列表过长:
    一些方法跟另一些方法进行交互,或者调用另一些方法的时候传入大量的参数这就会出现如果更改了其中一个参数,就得在多个方法内进行更改;
  • 过长的类:
    之所以会臃肿,是因为开发者缺乏对最基本的编码原则,即“单一职责原则”(SRP)的理解。这些类往往会变得很臃肿,是由于不同的且在功能上缺少关联的方法都放在了相同的类里面。
  • 常量值无处不在:
    经常会发现开发者(尤其是新手)会使用一些具有明确含义的常量值(主要是魔法数字),但没有给它们赋予合适的常量变量。这会降低代码的可读性和可理解性、可维护性
  • 重复逻辑

四、重构方法:

  • 重命名:
    对类,接口,方法,属性等重命名,以使得更易理解,类名,方法名,变量名命名规范
  • 抽取方法:
    将方法内的一段代码抽取为另一个方法,以使得该段代码可以被其他方法调用,这是重构中很重要很常用的,此举可以极大的精炼代码,减少方法的代码行数
  • 封装参数对象
    将过长的参数列表封装为参数对象
  • 抽取类、接口:
    • 将类的某些方法抽取组成个接口,该类自动实现该接口,不同子类各自不同实现
    • 抽取父类,多个拥有相似功能的业务类,相似的方法可以抽取到父类
    • 功能很繁杂的类 , 拆分子类
    • 抽取封装工具类
  • 定义常量:
    配置文件中配置、常量类、类内私有定义常量
  • 使用泛型类、泛型方法 避免重复逻辑(泛型的本质是参数化类型)

五、代码示例:

  • 1.抽取方法 RefactorExtractMethod {…}
  • 2.封装为参数对象 RefactParamList{…}
  • 3.接口类 public class AService implements IBaseExtractService 抽取父类 public class XxA extends XxBase {…} 拆分类:Controller类里处理所有也可以实现,按功能分层分成Controller、service、dao,功能繁杂的类,既有业务请求处理、又有返回数据格式处理(抽出来)
  • 4.使用泛型类 TestRefactT {…}
  • 5.使用合理的设计模式

Post Directory

扫码关注公众号:暂无公众号
发送 290992
即可立即永久解锁本站全部文章