首页 > > > 答应我,别再写上千行的类了好吗

最近在对已有项目进行扩展的时候,发现要改动的一个类它长766行,开放了近40个public接口,我流着泪把它给改完了。为了防止这样的惨剧再次发生在我的身上,我觉得有必要写一篇博客来让广大程序猿同胞知道代码重构的重要性
如果你身边有一个类写上千行的猿,一定要把此文转给ta

此时CV工程师打了个冷战
冗余代码,就是重复代码,通常出自使用Ctrl+C,Ctrl+V来生产代码的CV工程师之手,冗余代码的危害非常大:

一个类开放几十个接口,绝对存在职责过多的问题,就像图中的Tom猫一样手忙脚乱,一个类的职责过多也有巨大问题:
> 就是说不管哪儿出了问题,你这个类都得遭殃 > 就是说你这个类出了问题,不管哪儿都会遭殃
抽取冗余代码就是将重复代码抽取成一个独立的方法,之后再使用这段代码时就不再需要Ctrl + C,Ctrl + V,而是直接调用对应的方法即可
这样做也可以缩短原方法,使原方法更加简洁易懂
更值得一提的是如果这段代码需要修改,也只需修改一处,而不是发散式地到处修改
真是一箭三雕
   自动检测出个别重复代码的细微差别,有些代码可能只改动一两个变量,IDEA会自动检测出来,并在抽取方法时提醒我们,选择左侧Accept Signature Change(接受签名变动)可以使抽取的方法自动替换更多的重复点  可以选择替换掉所有的重复代码(竟然有18处)  如果你对抽取出的方法的名字、参数、返回值或是修饰符不满意,不要使用Ctrl + R 修改,IDEA提供了重构方法——更改签名(快捷键Ctrl + F6) > 注意:方法的名字指的是方法做了什么,而非怎么去做,最好是 **动词+名词** 格式 > > 比如:Tom.扫地() √ > > Tom.扫地With扫把() × > > Tom.用扫把扫地() ×将不应该由自己管理的成员变量和函数转移出去
那就要考虑两个问题:该转移谁?转移给谁?
来看一个图

注意,先决定移动哪个成员变量,然后再决定移动哪个函数
当你发现要转移的成员变量和函数找不到合适的类时(转移职责却找不到下家),要想起来,这里是程序世界,而我们程序猿就是类和对象的造物主,是时候创建一个新的类,让它来替我们分担职责(成员变量和函数)了
> 不推荐抽取参数对象,因为一般参数对象是给参数多的方法用的(用参数对象取代一长溜的参数),而且如果成员变量抽取了也不会影响任何函数的话,那就是无用对象了,不如直接把他们删除掉   由于抽取的函数直接使用了未抽取的对象而导致重构失败,涉及到另一个重构(使用get方法而非直接使用私有成员变量),使用此重构即可解决 
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/3932/viewspace-3152884/ ,如需转载,请注明出处,否则将追究法律责任。