在过去做了不少代码走读,发现了一些代码质量上比较普遍的问题,以下是其中的前五名:
-
臃肿的类: 类之所以会臃肿,是因为开发者缺乏对最基本的编码原则,即“单一职责原则”(SRP)的理解。这些类往往会变得很臃肿,是由于不同的且在功能上缺少关联的方法都放在了相同的类里面。
-
长方法: 方法之所以会变得很长主要是有以下几个原因:
-
许多没有关联性的、功能复杂的模块的代码都放在相同的方法内。这主要是开发者缺乏SRP的概念。
-
多种条件都放在同一个方法内,这在长方法内经常会发生的。这是由于缺乏McCabe代码复杂度和SRP的概念的比较。
-
大量的传参: 我经常遇到这几种情况,一些方法跟另一些方法进行交互,或者调用另一些方法的时候传入大量的参数。这就会出现如果更改了其中一个参数,就得在多个方法内进行更改。
-
常量值无处不在: 经常会发现开发者(尤其是新手)会使用一些具有明确含义的常量值(主要是魔鬼数字),但没有给它们赋予合适的常量变量。这会降低代码的可读性和可理解性。
-
模糊的方法名: 许多时候,以下取的方法名会影响代码的可读性和可理解性:
-
模糊的不具有任何意义的方法名
-
技术性的,却没有提及相关领域的名称
以下是6个可以用来帮助你解决80%(80-20原则)的代码质量问题的重构方法,并能帮助你成为一个更优秀的开发者。
-
提取类/抽离方法:正如上面提到的,像“臃肿的类”(一个类提供了本该有几个类提供的功能)这种代码异味应该将原有类中的方法和属性移动到适当数目的新类中去。旧类中对应新类的方法和属性应该被移除。另外,有时候一些类过于臃肿是因为它包含了被其他类使用本应该是其他类的成员方法的成员方法。这些方法也应该被迁移到合适的类中。
-
提取方法:像上面提到的“过长的方法”这种代码异味可以通过从旧方法中提取代码到一个或多个新方法中消除。
-
分离条件:许多时候,一个方法很长是因为包含好几个分支语句(if-else)。这些分支条件可以被提取和移动到几个单独的方法中。这确实能大大改善代码可读性和可理解性。
-
引入参数对象/保留全局对象:在我做代码审查时发现另外一个很常见的情况 - 好几个参数被传入方法。问题主要与需要从已有方法中增加或者移除一个方法参数有关。在这种场景,建议将相关方法参数组成一个对象(引入参数对象),让方法传递这些对象而不是每个单独的参数。
-
用符号常量替换魔法数字:对于有意义的并且到处被使用的字面常量,应该为它们分配一个命名常量。这能大大增强代码可读性和可理解性。
-
重命名方法:正如上面提到的,模糊不清的方法名会影响代码的可使用性。这些模糊不清的名称应该重命名为有意义的可能与业务术语有关的名称,来帮助开发者通过业务上下文更好地理解代码。这很需要技巧并且要求开发者与业务专家一起协作来理清代码需要满足的业务需求。有趣的是,这种重构方法看起来似乎非常容易理解,但是常常被许多开发者忽视,虽然在Eclipse这种IDE的refactor菜单项中经常出现这一项。
提升MongoDB 安全性的10个提示
相关推荐
重构-改善既有代码质量-中文版本。 重构概述 什么是重构? 重构是对软件内部结构的一种调整,目的...
重构——改善既有代码设计,经典文档,架构师必须教程
JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构
《31天重构速成》该系列文章通过31个示例介绍了31个重构条目。其中大多数重构都可以在Refactoring.com中找到,有一些来自《代码大全(第2版)》,剩下的则是作者平时经常使用或收集自其他互联网资源。
改善既有的代码重构(ppt),改善既有的代码重构,改善既有的代码重构PPT
代码重构 重构与模式
架构与代码质量重构实践
提升方法4.降低方法5.提升字段6.降低字段7.重命名(方法,类,参数)8.使用委派代替继承9.提取接口10.提取方法11.使用策略类12.分解依赖13.提取方法对象14.分离职责15.移除重复内容16.封装条件17.提取父类18.使用...
一直很喜欢重构这本书,但是由于自己记性不太好,书看过之后其中的方法总是记不住,于是想如果有电子版的重构书就好了,工作中遇到重构的问题可以随时打开查阅。在网上搜索了许久,发现重构这本书有英文chm版本的,...
书中给出了70 多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机和技术。《重构 改善既有代码的设计》提出的重构准则将帮助你一次一小步地修改你的代码,从而减少了开发过程中的风险。
对经验模态分解后的各分量IMF进行重构代码,函数可直接调用。
经典重构书籍,以Java语言为基础编写,讲解了重构的意义,介绍了多种重构方法。
代码重构
将EEG信号使用移动方差化方法进行序列重构,进而在多个尺度上提取时间序列的2个特征值——样本熵和方差熵。最后对所提取的特征值使用KS检验方法进行p值检验。实验证明,利用移动方差化方法重构的多个尺度上的时间序列...
简单易懂的代码重构方法,帮助快速掌握C#代码重构的方法,提高代码质量。
重构改善现有代码设计.pdf 重构改善现有代码设计.pdf
【信号处理】基于线性调频信号(LFM)压缩感知的稀疏与重构算法(OMP)附matlab代码.zip