6 个重构方法可帮你提升80%的代码质量

news/2024/7/16 7:53:37 标签: java, eclipse, IDE, 重构

在过去做了不少代码的ReView,发现了一些代码质量上比较普遍的问题,以下是其中的前五名

  1. 臃肿的类: 类之所以会臃肿,是因为开发者缺乏对最基本的编码原则,即“单一职责原则”(SRP)的理解。这些类往往会变得很臃肿,是由于不同的且在功能上缺少关联的方法都放在了相同的类里面。

  2. 长方法: 方法之所以会变得很长主要是有以下几个原因:

    1. 许多没有关联性的、功能复杂的模块的代码都放在相同的方法内。这主要是开发者缺乏SRP的概念。

    2. 多种条件都放在同一个方法内,这在长方法内经常会发生的。这是由于缺乏McCabe代码复杂度和SRP的概念的比较。

  3. 大量的传参: 我经常遇到这几种情况,一些方法跟另一些方法进行交互,或者调用另一些方法的时候传入大量的参数。这就会出现如果更改了其中一个参数,就得在多个方法内进行更改。

  4. 常量值无处不在: 经常会发现开发者(尤其是新手)会使用一些具有明确含义的常量值(主要是魔鬼数字),但没有给它们赋予合适的常量变量。这会降低代码的可读性和可理解性。

  5. 模糊的方法名: 许多时候,以下取的方法名会影响代码的可读性和可理解性:

    1. 模糊的不具有任何意义的方法名

    2. 技术性的,却没有提及相关领域的名称

 

6个处理上面代码异味的重构方法(手法) :

  以下是6个可以用来帮助你解决80%(80-20原则)的代码质量问题重构方法,并能帮助你成为一个更优秀的开发者。

  1. 提取类/抽离方法:正如上面提到的,像“臃肿的类”(一个类提供了本该有几个类提供的功能)这种代码异味应该将原有类中的方法和属性移动到适当数目的新类中去。旧类中对应新类的方法和属性应该被移除。另外,有时候一些类过于臃肿是因为它包含了被其他类使用本应该是其他类的成员方法的成员方法。这些方法也应该被迁移到合适的类中。

  2. 提取方法:像上面提到的“过长的方法”这种代码异味可以通过从旧方法中提取代码到一个或多个新方法中消除。

  3. 分离条件:许多时候,一个方法很长是因为包含好几个分支语句(if-else)。这些分支条件可以被提取和移动到几个单独的方法中。这确实能大大改善代码可读性和可理解性。

  4. 引入参数对象/保留全局对象:在我做代码审查时发现另外一个很常见的情况 - 好几个参数被传入方法。问题主要与需要从已有方法中增加或者移除一个方法参数有关。在这种场景,建议将相关方法参数组成一个对象(引入参数对象),让方法传递这些对象而不是每个单独的参数。

  5. 用符号常量替换魔法数字:对于有意义的并且到处被使用的字面常量,应该为它们分配一个命名常量。这能大大增强代码可读性和可理解性。

  6. 重命名方法:正如上面提到的,模糊不清的方法名会影响代码的可使用性。这些模糊不清的名称应该重命名为有意义的可能与业务术语有关的名称,来帮助开发者通过业务上下文更好地理解代码。这很需要技巧并且要求开发者与业务专家一起协作来理清代码需要满足的业务需求。有趣的是,这种重构方法看起来似乎非常容易理解,但是常常被许多开发者忽视,虽然在Eclipse这种IDE的refactor菜单项中经常出现这一项。

文章来源:http://vipshichg.iteye.com/blog/2011581


http://www.niftyadmin.cn/n/1318818.html

相关文章

前端面试宝典 每日一题(18)说说你对BOM的理解?

🧑🏻‍写在前面的话: 这个系列文章可能开始,有人会觉得很low,我是打算从H5先开始整理,最后到常见的前端框架、以及一些前端常见的算法、leetcode的一些算法解析,感兴趣的小伙伴可以持续关注&…

vi-vim (七):搜索

文本(字符串)搜索 7.1搜索常用命令 向前搜索: / 向后搜索: ? 常用命令: 1 /    向前重复搜索 2 ? 向后重复搜索 3 /regex 向前搜索指定的正则表达式…

truncate table时发生ORA-02266错误

前段时间,我将测试环境的数据导入到开发数据库后,发现开发环境数据库的数据量太大(千万级别),应用在开发环境(因开发数据库的性能远比不上测试数据库的性能)太慢甚至出现有些功能没法正常使用的问题,于是又…

Javascript常用函数、方法速查手册

文章目录前言一、Array对象二、String对象三、Number 对象四、Math对象五、Date 对象六、RegExp对象七、全局属性八、全局方法总结前言 这篇文章主要对我们日常开发过程中使用频率比较高的原生Js方法,进行一次简单的整理归纳,方便再开发使用的时候进行快…

数据数据库数据库系统(Database System)原理

题记:写这篇博客要主是加深自己对数据数据库的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。 数据库道理 数据库系统(Database System)是用于组织和存取大批数据的管理系统,便利多 用…

Java单例模式的五种写法

在网上看到《单例模式的七种写法》,写的非常好,于是转载过来学习学习,在此我按原博客一位读者同学的分类,分成懒汉、恶汉、静态内部类、枚举和双重校验锁五种。 第一种(懒汉,线程安全)&#xff…

关于配置JDK的问题

在WIN 7系统下安装JDK环境变量的配置: 在哦系统属性里点击 高级系统设置再单击环境变量, 在系统变量里新建CLASSPATH, 值为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME\lib\tools.jar; 新建JAVA_HOME 值为:C:\Program Files\Java\jdk1.…

各浏览器中for in顺序的差异

如下 var obj { 2:"2", 40:"40", 15:"15", }; for (var k in obj) { console.log(k); }; IE6/7/8/Firefox/Safari24015IE9/Chrome10/Opera1121540即IE9/Chrome10/Opera11中不是按定义时的顺序输出的。for in规则参考ECMAScript5 12.6.4。 文…