"编码中的21种代码坏味道" 在设计和编码中,存在着21种代码坏味道,这些坏味道可能会给后续维护带来极大影响。如果我们能够识别和消除这些坏味道,那么我们的代码将变得更加简洁、可维护和可扩展。 Duplicated Code(重复的代码) Duplicated Code是代码坏味道中最常见的一种。它指的是在不同的地点出现相同的程序结构。如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好。最单纯的 Duplicated Code 就是「同一个 class 内的两个函数含有相同表达式(expression)」。这时候你需要做的就是采用 Extract Method(110)提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码。 Long Method(过长函数) 拥有「短函数」(short methods)的对象会活得比较好、比较长。不熟悉面向对象技术的人,常常觉得对象程序中只有无穷无尽的 delegation(委托),根本没有进行任何计算。和此类程序共同生活数年之后,你才会知道,这些小小函数有多大价值。「间接层」所能带来的全部利益 - 解释能力、共享能力、选择能力 - 都是由小型函数支持的。 在编写代码时,我们遵循这样一条原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途(而非实现手法)命名。我们可以对一组或甚至短短一行代码做这件事。哪怕替换后的函数调用动作比函数自身还长,只要函数名称能够解释其用途,我们也该毫不犹豫地那么做。 Extract Method(110) Extract Method 是一种常用的重构方法,它可以将重复的代码提炼出来形成一个新函数。如果函数内有大量的参数和临时变量,它们会对你的函数提炼形成阻碍。如果你尝试运用 Extract Method(110),最终就会把许多这些参数和临时变量当做参数,传递给被提炼出来的新函数,导致可读性几乎没有任何提升。 Replace Temp with Query(120) Replace Temp with Query 是一种可以消除临时变量的方法。如果你已经使用 Extract Method(110)提炼出了新函数,但仍然有太多临时变量和参数,那就可以运用 Replace Temp with Query(120)来消除这些暂时元素。 Introduce Parameter Object(295)和 Preserve Whole Object(288) Introduce Parameter Object(295)和 Preserve Whole Object(288)可以将过长的参数列变得更简洁一些。如果你已经使用 Extract Method(110)和 Replace Temp with Query(120),仍然有太多临时变量和参数,那就可以使用 Introduce Parameter Object(295)和 Preserve Whole Object(288)来简化参数列。 Replace Method with Method Object(135) Replace Method with Method Object 是一种可以将长函数分解成多个小函数的方法。如果你已经使用了 Extract Method(110)、Replace Temp with Query(120)和 Introduce Parameter Object(295)等方法,但仍然有太多临时变量和参数,那就可以使用 Replace Method with Method Object(135)来将长函数分解成多个小函数。 以上是编码中的21种代码坏味道中的两个典型例子。通过对这些坏味道的识别和消除,我们可以编写出更加简洁、可维护和可扩展的代码。
剩余8页未读,继续阅读
- adgjlmbcz2015-11-18描述很简单,概括性很强,不是特别的具体
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于ESP8266和Arduino的HomeMatic水表读数系统.zip
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip