写点什么

改善代码质量的 6 种重构模式

  • 2014-02-04
  • 本文字数:1404 字

    阅读完需:约 5 分钟

Kumar 是位涉猎广泛的软件工程师,对很多技术领域都有非常高的热情,如 Java/JEE、PHP、.NET、C/C++ 等程序设计语言、移动编程语言、应用安全、云计算、API、移动应用、Google Glass、大数据等等,其 Twitter 帐号是 @eajitesh。近日,Kumar 撰写了一篇文章,谈到了常见的代码坏味道以及改善代码质量的6 种重构模式,并对每种重构模式的使用场景进行了详尽的论述与讨论。

最近一段时间,我参与了几次代码审查,发现了5 种出现次数较多的代码坏味道,总结如下:

1. 过大的类:由于开发者没能很好地理解“单一职责原则”这一编码规则而导致类的规模过于庞大。由于在同一个类中存在着完成各种不相关功能的各种方法,因此这样的类随着时间的流逝会变得越来越大。

2. 过长的方法:由于如下几个原因,我们发现有些方法显得太长了:

  • 在同一个方法中,几个代码块实现了不相关 / 多个功能。这主要是由于开发者不理解单一职责原则所导致的。
  • 同一个方法中存在多个条件。我们发现在过长的方法中,这种情况是非常普遍的。这可以归结为由于开发者缺乏对 McCabe 代码复杂度和单一职责原则概念的理解所造成的。

3. 方法参数:有时方法会彼此传递几个参数进行相互的调用。这时,如果修改了参数列表中的一个参数,那就需要修改几个方法签名。

4. 遍布在各处的字面常量:有一些程序员新手会使用字面常量值(大多数是数字),在使用的时候心里对这些常量值有着确切的定义,但却没有将其赋给具名的常量。这会严重降低代码的可读性和可理解性。

5. 含糊不清的方法名:很多时候,下面这样的方法名会严重影响到代码的可读性与可理解性:

  • 没有任何意义、含糊不清的名字
  • 只是一个技术上的名字,与问题域没有任何关联关系。

根据上面所讨论的代码坏味道,下面给出可以有效解决这些问题的 6 种重构模式,合理使用这些模式能够帮你解决大多数的代码质量问题并成为一名更优秀的开发者。

1. 抽取类与移动方法:如上所述,诸如过大的类等代码坏味道可以通过将类划分为恰当数量的小类来解决。在这些新类中,我们需要将原来的类中的一些属性和方法移动过来。除此之外,有时类中还会包含大量的方法,这些方法会被其他类所用,这种方法也可以移动到恰当的新类当中。

2. 抽取方法:就像上面所介绍的,诸如过长的方法这种代码坏味道可以通过将原来方法中的代码抽取到新方法中来解决。

3. 分解条件:很多时候,过长的方法实际上包含了过多的条件语句(if-else)。我们应该将这些条件抽取出来放到单独的方法当中,这会让代码的可读性与可理解性上一个新台阶。

4. 引入参数对象 / 保留整个对象:在代码审查过程中,我发现将多个参数传递到方法中是一个很普遍的现象。如果要增加或是删除方法中的参数,那这么做就会引发问题。在这种情况下,我们建议将相关的参数组织为一个对象(引入参数对象),将对象而不是单独的参数传递到方法中去。

5. 使用符号常量代替魔数:对于那些有确切含义并在很多地方使用的字面常量值来说,你应该将其赋给具名的常量。这会增强代码的可读性与可理解性。

6. 重命名方法:含糊不清的方法名会影响到代码的可读性。我们应该使用有意义的方法名,与业务领域的术语相关,并且能够帮助开发者理解业务上下文中的代码。这是需要技巧的,需要开发者与业务分析师紧密配合来清楚地理解代码所要满足的业务需求。有趣的是,这种重构模式看起来似乎很简单,但实际上却经常被很多开发者所忽视。值得一提的是,很多 IDE 都提供了重命名这个重构选项,值得你尝试一下。

2014-02-04 12:073385
用户头像

发布了 88 篇内容, 共 272.9 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

KeyShot 2023.3 Pro for mac(3D渲染和动画制作软件)

展初云

Mac 渲染和动画软件 KeyShot

关于WMS三个核心问题的解读

万界星空科技

CPU vs GPU:谁更适合进行图像处理?

Finovy Cloud

gpu cpu

打造“泛”资产管理平台,做企业资产的数智管家

用友BIP

资产管理

第四期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效管理

亚马逊云AI大语言模型应用下的创新Amazon Transcribe的使用

淼.

如何挑选代理IP

Geek_ccdd7f

职业倦怠无所畏惧,智慧云为你的工作增添活力

知者如C

Mac远程控制工具 Screens 4中文最新激活版

胖墩儿不胖y

远程控制软件 Mac软件 远程工具

如何定制开发软件 App?

Geek_16d138

定制软件开发 app定制开发

DAPP钱包Token质押挖矿系统开发实践

l8l259l3365

用友Fast by BIP On天翼云重磅发布,一站式服务大型企业数智化!

用友BIP

天翼云 大型企业数智化速达包

用二维码展示产品,随时查看图文并茂的介绍

草料二维码

iStat Menus for Mac(系统活动监控软件)

展初云

Mac软件 iStat Menus

LRTimelapse for Mac(延时摄影视频制作)

展初云

Mac软件 lrTimelapse 延时摄影视频制作软件

代理IP按流量计费贵么?

Geek_ccdd7f

三大开源向量数据库大比拼

互联网工科生

向量数据库

软件测试/测试开发丨​利用人工智能ChatGPT批量生成测试数据

测试人

软件测试

教您如何使用API接口获取拼多多商品详情

Noah

架构实战营-模块七作业

王朝阳

对话在行人|飞龙汽车:通过业财融合,年节约成本2000多万

用友BIP

python爬虫代理的渠道有哪些

Geek_ccdd7f

改善代码质量的6种重构模式_架构_张龙_InfoQ精选文章