IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

2022-12-18 0 936

20大高阶构架专题讲座每星期送抵

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

前段天数,在对已近工程项目展开扩充的这时候,辨认出要更动的两个类它长900行,对外开放了近40个publicUSB,我笑著把它给改完了。

为的是避免这种的意外事件悲剧重演在我的头上,我真的有必要性写一则网志来让各阶层流程猿台湾同胞晓得标识符解构的必要性性。

假如你身旁有两个类写上绝情的猿,很大要把该文转让给ta

为何类无法太长?

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

类太长——读难通,扩充难通

读难通——间接用控制杆滚都得好几秒,即使是原作,天数长了更何况也无法厘清整座类,更别说是其它的听众

扩充难通——两个Chlorophyta过多的USB,会让扩充那个类显得极度十分困难,不动绝情

类太长——可能将有输入输出标识符

这时CV工程师发狠美苏

输入输出标识符,是多次重复标识符,一般来说出自于采用Ctrl+C,Ctrl+V来制造标识符的CV技师之手,输入输出标识符的危害性十分大:

输入输出标识符使方式、类太长,不简约

输入输出标识符会导致收敛式修正(输入输出标识符须要发生变动时,每处Ctrl+V都须要修正)

类太长——多半是职责过多

两个类对外开放几十个USB,绝对存在职责过多的问题,就像图中的Tom猫一样手忙脚乱,两个类的职责过多也有巨大问题:

违反设计原则——单一职责原则(单一职责原则要求两个类只实现两个职责,比如一只Tom只做扫地、擦桌、拖地中的一件事,而其它事的实现可以转移给史派克狗或肥胖女佣),违反了那个原则会导致收敛式变化、收敛式修正、类太长等标识符问题,还会让你的类难以扩充,甚至会让其它流程猿认为你不专业

收敛式变化(指引发此类修正的地方很多),假如两个类的职责很多,那它的扇入(调用者)很大很多,每个调用者的修正都有可能将让你那个类不得不随之修正,也是收敛式变化

是说不管哪儿出了问题,你那个类都得遭殃

收敛式修正(指此类修正引发修正的地方很多),相同的,假如两个类职责很多,那支撑它实现的下级,即扇出(被调用方)很大很多,假如此类逻辑发生发生变动,所有下级被调用者可能将都得随之修正,也是收敛式修正

是说你那个类出了问题,不管哪儿都会遭殃

无法扩充:假如你的两个类USB十分多,那它的子类怎么办?它的包装类怎么办?难道全部都要实现这么多USB,全部都要承担同样多的职责吗?扩充起来真的十分麻烦

触发机关:【测试之怒】【运维之怒】

我已经写了几绝情了,怎么办?

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

解构——抽取输入输出标识符

抽取输入输出标识符是将多次重复标识符抽取成两个独立的方式,之后再采用这段标识符时就不再须要Ctrl + C,Ctrl + V,而是间接调用对应的方式即可

这种做也可以缩短原方式,使原方式更加简约易懂

更值得一提的是假如这段标识符须要修正,也只需修正一处,而不是收敛式地到处修正

真是一箭三雕

采用IDEA展开输入输出标识符的抽取

1.找到多次重复标识符

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

2.展开方式抽取 右键->选择解构->抽取->方式 (或者间接采用快捷键Ctrl + Alt + m)

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

自动检测出个别多次重复标识符的细微差别,有些标识符可能将只更动一两个变量,IDEA会自动检测出来,并在抽取方式时提醒我们,选择左侧Accept Signature Change(接受签名发生变动)可以使抽取的方式自动替换更多的多次重复点

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

可以选择替换掉所有的多次重复标识符(竟然有18处)

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

3.解构——更改方式签名

假如你对抽取出的方式的名字、参数、返回值或是修饰符不满意,不要采用Ctrl + R 修正,IDEA提供了解构方式——更改签名(快捷键Ctrl + F6)

注意:方式的名字指的是方式做了什么,而非怎么去做,最好是 动词+名词 格式

比如:Tom.扫地 √

Tom.扫地With扫把 ×

Tom.用扫把扫地 ×

解构——转移成员变量+函数(转移职责)

将不应该由自己管理的成员变量和函数转移出去

那就要考虑两个问题:该转移谁?转移给谁?

来看两个图

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

图中成员【偏A】被类【A】调用两次,而只被它所在的类【太长类】调用1次,因而应该转移给【A】去管理

由于函数【偏A】与成员【偏A】的亲密度较高(只调用了【偏A】),因而应与【偏A】共进退,同去留,转移给【A】

成员【偏B】和函数【偏B】也是相同道理

职责1(函数【1】和成员【偏职责1】)和职责2(函数【2】和成员【偏职责2】)由于找不到可转移的合适的类,所以应抽取出两个新的类

注意,先决定移动哪个成员变量,然后再决定移动哪个函数

采用IDEA转移成员变量和函数

移动成员变量,鼠标选择成员变量->右键->Refactor->Move,然后选择转移至哪个类

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

移动函数(与移动成员变量步骤相同)

解构——抽取类

当你辨认出要转移的成员变量和函数找不到合适的类时(转移职责却找不到下家),要想起来,这里是流程世界,而我们流程猿是类和对象的造物主,是这时候创建两个新的类,让它来替我们分担职责(成员变量和函数)了

采用IDEA抽取类

1.解构 选中要搬的成员变量和函数,右键->Refactor->Extract->Delegate(抽取两个委托者,委托他来管理这部分变量和函数,假如只有变量或只有函数,可以抽出参数对象Paramater Object或方式对象Method Object)

不推荐抽取参数对象,因为一般参数对象是给参数多的方式用的(用参数对象取代一长溜的参数),而且假如成员变量抽取了也不会影响任何函数的话,那是无用对象了,不如间接把他们删除掉

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

2.为新类起个名,选个包吧

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

3.注意,抽取的函数和成员很大要符合两个原则,那是被抽取函数采用被抽取成员的次数很大高于剩余函数的次数,不然违反亲密性原则(成员应归于调用它最多的类,没有理由你用的比我多还让我来管理)

4.一些小问题

由于抽取的函数间接采用了未抽取的对象而导致解构失败,涉及到另两个解构(采用get方式而非间接采用私有成员变量),采用此解构即可解决

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定
IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

之前,给大家发过三份Java面试宝典,这次新增了一份,目前总共是四份面试宝典,相信在跳槽前两个月按照面试宝典准备准备,基本没大问题。

《java面试宝典5.0》(初中级)

《350道Java面试题:整理自100+公司》(中高级)

《资深java面试宝典-视频版》(资深)

《Java[BAT]面试必备》(资深)

分别适用于初中级,中高级资深级技师的面试复习。

内容包含java基础、javaweb、mysql性能优化、JVM、锁、百万并发、消息队列,高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper、数据结构、限流熔断降级等等。

IDEA真牛逼,900行”又臭又长”的类重构,几分钟搞定

看到这里,证明有所收获

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务