1. 重复代码。
相关class具有相同代码: 抽出代码,放入基类中。
无关class具有相同代码:抽出代码,放入一个独立class或函数中。
2. 过长的函数
动则上千行的函数,我的确见过很多,工作中这样的代码一点也不稀罕。
找出函数中逻辑和意义比较紧凑的部分,抽出来成为一个新的小函数,把局部变量作为参数或返回值。
往往需要对参数列表再次进行重构,如Replace Temp with query, Introduce Parameter等具体方法操作。
3. 过长参数。
6-7个参数就应当考虑传入一个结构体了。
4. 发散式变化。
如果需要增加一个新功能需要修改一些函数,如果需要增加另一个新功能需要修改另外几个函数,表明class在不同的方向上发生了变化了。
这个时候应当把相应的变化提炼到一个新的类中,使得增加的新功能只会改变这个单一的类。
5. 游击战的修改。
如果你要做出某种改变,你需要在不同的class内作出小修改,这个时候应当move method或move field将需修改的代码放到同一class中去。这种情况类似于发散式变化的情况。
6. 移情别恋
数据和加诸其上的操作行为封装在一起形成类。如果某些函数对于别人的class的兴趣高过自己class时,应当分手了。让他走吧,把他移到他所感兴趣的类中去。
这个往往可以通过看函数所用到的数据属于哪个类的更多。
评论