9.引入参数对象
有些参数总是很自然的同时出现,那么就以一个对象取代这些参数。这里也说的非常明白,就是说一个函数的入参具有某种关联关系,而且这种关联关系一直重复出现,那么就应该将这具有关联关系的多个参数转变为对象。转变为一个对象的好处之前说了很多次了,主要就是防止代码的变动导致的全局变动,而且能够减少重复的代码。
10.移除设置函数
类中的某个字段应该在对象创建时被设置,然后就不再改变。去掉该字段的所有设置函数。就是将一些在对象创建时通过构造方法初始化的参数,而且在对象的生命周期内不会再改变的属性,那么就应该将其参数的赋值方法移除掉。
11.隐藏函数
如果有一个函数,荣来没有被其他任何类用到,那么就将这个函数修改为private.这块也非常的明确了,也就是私有专用的一些函数不要对外暴露。
12.以工厂函数取代构造函数
你希望在创造对象的时候不仅仅是做简单的建构动作,那么就将构造函数替换为工厂函数。如果我们经常需要根据类型码创建相应的对象,但是因为构造函数只能创建一个对象,因此使用构造工厂来根据不同的情况创建不同的对象。
改造过程主要是开发工厂方法,并将根据入参创建对象的代码放置到工厂函数中,并将原始的创建函数私有化。为何私有化的原因就是不再使用了,然后将问题暴露出来再进行改造。本人觉得重构主要还是一种意会的过程吧,个人觉得看一些主要的代码然后就基本知道了书上是如何做这件事的,具体到工作中使用出来还需要对其有深刻的理解。
13.封装向下转型
如果某个函数返回的对象,需要由函数调用者执行向下转型,那么就将这个向下转型的过程移到函数中。
14.以异常取代错误码
如果一个函数返回一个特定的错误码,用以表示某种错误情况,那就改成异常吧!很多人写代码异常用的少,然后代码中各种if语句。还有在jdbc事务中异常回滚的也不加异常,最后产生各种脏数据的。因此在入参或者计算结果不符合预期的时候我们就可以直接采用异常的方式结束程序的向下执行。
1.非受控异常
非受控异常表征的是代码逻辑错误,这种异常无法在代码中直接捕获,因此需要在调用者除进行前期判断,但是考虑到这种判断是非常少见的,因此需要使用卫语句去检测。
2.受控异常
受检异常表征代码中能够自动处理的异常,需要根据需求创建特定的异常类。但是如果采用受检异常的做法可能会导致一处变动影响到很多地方。因此我们可以采用临时中间函数,让符合条件的处理走原函数,特殊的情况走中间的临时中间函数。
15.以测试取代异常
面对一个调用者可以预先检查条件,抛出一个异常。那么修改调用者,使它在调用函数之前先做检查。让有问题的入参不再继续向下执行。