《重构》心得
买了本《重构》,粗略的看了第一遍,把一些要点记录在印象笔记中了,发出来分享下。
?
首先是,代码的坏味道:
Duplicated Code重复代码某些代码重复出现,可以抽象到一个新的函数中,或者抽象到父类上去。?Long Method过长函数过长函数是指,一个函数里面实现的功能太多,越长也就越难理解。你需要将一个过长的函数分解成各种小函数,命名是关键。?Data Clumps数据泥团函数的参数非常的多,调用也频繁,其中一个参数被删掉,其他的参数就不是那么有意义了。可以把这些参数抽到一个类里面,直接传这个类的对象就好了。?Large Class过大的类一个类如果做太多的事情,就会导致内部有很多实例变量,重复代码就会出现。考虑如何把他们分解到小的类上面。?Long Parameter List过长的参数列一个方法的参数太多会变得很恶心考虑,如果可以传一个对象给函数,函数可以通过这个对象获得到那些参数?Divergent Change发散式变化如果需要修改或者添加不同的功能,需要修改不同的函数。考虑如何把它们分到不同的类里面。?Shotgun Surgery霰弹式修改如果需要修改或者添加某个功能,需要修改好几个地方考虑把需要修改的地方集中到一个函数里。?Feature Envy依恋情结如果某个函数执行的时候调用了另一个对象的大多数方法。也许应该把这个方法移动到那个对象里面去。?Primitive Obsession基本类型偏执将一些基本类型组成的数据抽象成小对象,money啊,phone number之类?Switch Statement switch惊悚现身减少使用switch,就是少在case里面放太多的代码,只让它做出一个选择返回一个状态,然后具体的操作通过调用对象的函数来实现。??Parallel Inheritance Hierarchies平行继承体系当你给一个类增加字段的时候,也要给另一个类增加同样的字段。解决方法是,让一个继承体系的实例去引用另一个集成体系的实例。?Lazy Class冗赘类如果一个类所得不值其身价,就让它消失?Speculative Generality夸夸其谈未来性没有必要以“考虑到未来某天我们一定要做这样的事情”为借口做些不必要的事情。?过多的注释优良的代码是可以直接看就能明白它的作用,复杂的代码才需要把每一步的作用都详细的说明出来。?接下来是,重构手法:Extract Method(提炼函数)从大方法中提炼出独立的部分,函数的细粒度越小,一是提高了它的复用性,二是它被覆写的时候更容易。?Inline Method(内联函数)当有时候一个函数过于简短,里面的内容可能就是做一个简单的判断就返回的话,可以考虑去掉这个方法。?Inline Temp(内联临时变量)把一些通过方法返回的变量换成那句方法的调用(query)。?Replace Temp with Query(以查询取代临时变量)当某些临时变量只被赋一次值的时候(可以将变量声明为final,然后运行下看看是否只被赋值一次),就将这些临时变量全部换成方法的调用(或者成为query)。?Introduce Explaining Variable(引入解释性变量)当某些语句非常的复杂,然后返回一个boolean型,然后这条长长的语句直接丢进if里判断,这会导致难以理解,可以引入解释型变量isRight之类的,将这些变量放入if中会比较好理解。?Replace Data Value with Object(以对象取代数据值)有些数据,比如电话号码,如果仅仅用一个字符串存储可能以后操作会非常困难,它可能需要多种显示的形式,所以把看似简单的数据包装成对象会方便以后的操作。?Encapsulate Field(封装字段)将public的字段改成private,并提供setter和getter?转载不注明出处,被人趴了肿么办,http://www.cnblogs.com/kross/p/3512800.html?