书名译者:橙味菌
镜像:
https://juejin.im/post/5e11dd736fb9a047f42e61ad应允我,别再写上绝情的类了好吗?
前段天数在对已近工程项目进行扩充的这时候,辨认出要更动的两个类它长766行,对外开放了近40个publicUSB,我笑著把它给改完了。为的是避免这种的意外事件悲剧重演在我的头上,我真的有必要性写一则网志来让各阶层流程猿台湾同胞晓得标识符解构的必要性性
假如你身旁有两个类写上绝情的猿,很大要把该文转让给ta
为何类无法太长?
类太长——读难通,扩充难通
读难通——间接用控制杆滚都得好几秒,即使是原作,天数长了更何况也无法厘清整座类,更别说是其它的听众扩充难通——两个Chlorophyta过多的USB,会让扩充这个类显得极度十分困难,不动绝情类太长——可能有输入输出标识符
这时CV技师发狠美苏
输入输出标识符,就是多次重复标识符,一般来说出自于采用Ctrl+C,Ctrl+V来制造标识符的CV技师之手,输入输出标识符的危害性十分大:
输入输出标识符使方式、类太长,不简约输入输出标识符会导致收敛式修正(输入输出标识符须要发生变动时,每处Ctrl+V都须要修正)类太长——大多是职能过多
两个类对外开放几十个USB,绝对存在职能过多的问题,就像图中的Tom猫一样手忙脚乱,两个类的职能过多也有巨大问题:
违反设计原则——单一职能原则(单一职能原则要求两个类只实现两个职能,比如一只Tom只做扫地、擦桌、拖地中的一件事,而其它事的实现可以转移给史派克狗或肥胖女佣),违反了这个原则会导致收敛式变化、收敛式修正、类太长等标识符问题,还会让你的类无法扩充,甚至会让其它流程猿认为你不专业收敛式变化(指引发此类修正的地方很多),假如两个类的职能很多,那它的扇入(调用者)很大很多,每个调用者的修正都有可能让你这个类不得不随之修正,也就是收敛式变化 就是说不管哪儿出了问题,你这个类都得遭殃收敛式修正(指此类修正引发修正的地方很多),相同的,假如两个类职能很多,那支撑它实现的下级,即扇出(被调用方)很大很多,假如此类逻辑发生发生变动,所有下级被调用者可能都得随之修正,也就是收敛式修正 就是说你这个类出了问题,不管哪儿都会遭殃无法扩充:假如你的两个类USB十分多,那它的子类怎么办?它的包装类怎么办?难道全部都要实现这么多USB,全部都要承担同样多的职能吗?扩充起来真的十分麻烦触发机关:【测试之怒】【运维之怒】我已经写了几绝情了,怎么办?
解构——抽取输入输出标识符
抽取输入输出标识符就是将多次重复标识符抽取成两个独立的方式,之后再采用这段标识符时就不再须要Ctrl + C,Ctrl + V,而是间接调用对应的方式即可
这种做也可以缩短原方式,使原方式更加简约易懂
更值得一提的是假如这段标识符须要修正,也只需修正一处,而不是收敛式地到处修正
真是一箭三雕
采用IDEA进行输入输出标识符的抽取
找到多次重复标识符进行方式抽取 右键->选择解构->抽取->方式 (或者间接采用快捷键Ctrl + Alt + m) 自动检测出个别多次重复标识符的细微差别,有些标识符可能只更动一两个变量,IDEA会自动检测出来,并在抽取方式时提醒我们,选择左侧Accept Signature Change(接受签名发生变动)可以使抽取的方式自动替换更多的多次重复点 可以选择替换掉所有的多次重复标识符(竟然有18处)解构——更改方式签名 假如你对抽取出的方式的名字、参数、返回值或是修饰符不满意,不要采用Ctrl + R 修正,IDEA提供了解构方式——更改签名(快捷键Ctrl + F6) 注意:方式的名字指的是方式做了什么,而非怎么去做,最好是动词+名词 格式 比如:Tom.扫地() √ Tom.扫地With扫把() × Tom.用扫把扫地() ×解构——转移成员变量+函数(转移职能)
将不应该由自己管理的成员变量和函数转移出去
那就要考虑两个问题:该转移谁?转移给谁?
来看两个图
注意,先决定移动哪个成员变量,然后再决定移动哪个函数
采用IDEA转移成员变量和函数
移动成员变量,鼠标选择成员变量->右键->Refactor->Move,然后选择转移至哪个类移动函数(与移动成员变量步骤相同)解构——抽取类
当你辨认出要转移的成员变量和函数找不到合适的类时(转移职能却找不到下家),要想起来,这里是流程世界,而我们流程猿就是类和对象的造物主,是这时候创建两个新的类,让它来替我们分担职能(成员变量和函数)了