下篇

未匹配的标注

循环语句

我们常用到循环,现在有了新的函数,例如 php 的 foreach(),java 的管道操作(如 filter 和 map),可以帮助我们更快地处理数据。

冗赘的元素

给代码增加结构(如类和函数)可以支持变化、促进复用。但可能最初在编写类或函数时觉得以后可能会变得更大、更复杂,结果却越变越小,最后剩一个函数,那么这时便要考虑将其归并到其他地方了。

夸夸其谈通用性

如果你总是觉得“总有一天需要做这事”,然后企图以各种各式各样的钩子和特殊情况来处理一些事情,那么坏代码就出现了,这样做往往造成系统更加难理解和维护。
应该遵循这样的原则:如果所有的装置都会被用到,那就值得那么做,如果用不到,就不值得。

临时字段

有时某个类的某个字段仅为某种特定情况而设,这样的代码不容易理解,因为你通常认为对象在所有时候都需要它的所有字段,在字段未被使用的情况下猜测当初设置它的目的,会让你很疑惑。
最好是将这个字段和与这个字段相关的代码集中在一块。

过长的消息链

如果你看到用户向一个对象请求另一个对象,然后再向后者请求另一个对象,接着继续请求另一个对象……这就是消息链。这意味着代码紧耦合,一旦对象间的关系发生变化,那么客户端就得做出相应的修改。
通常是将调用对象的代码用函数封装起来,这样客户端不需要知道对象间的关系,只需要知道调用这个函数就可以返回最终需要的对象。

中间人

前面消息链讲到的封装如果使用不恰当,可能会造成过度使用,这时应该移除中间人(封装的函数),直接与真正负责的对象打交道。

内幕交易

模块之间大量交换数据,增加模块间的耦合,应当尽量减少这种情况。

过大的类

如果单个类做太多事情,往往会出现很多字段与重复代码。最好是将相关的变量提到新类,或者提炼相同的代码到函数去。

异曲同工的类

当存在不同的类却在做同样的事时,可以通过搬移函数到其中一个类,逐渐消灭另一个类。

纯数据类

纯数据类是指除了拥有一些字段和访问这些字段的函数之外,便没有其他用处了。可以尝试找出这些函数被调用的地点,尽量将调用行为搬移到纯数据类来。

被拒绝的遗赠

子类应该继承超类的函数和数据,如果存在子类不想继承的,说明继承体系设计错误。这时可以新建一个兄弟类,将不需要的函数推给兄弟类,这样超类就只持有子类共享的东西。
子类不想继承超类的接口与不想实现超类的接口是两回事,既然不想继承,那就直接画清界限吧。

注释

如果你发现一段代码有着长长的注释时,说明这段代码难以理解,此时需要将代码搬移到新函数,并为它取个说明这段代码用途的名字。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 查看所有版本


暂无话题~