专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

求求你别再写上千行的类了,试试IDEA这些牛逼的重构技巧吧

  答应我,别再写上千行的类了好吗
  最近在对已有项目进行扩展的时候,发现要改动的一个类它长766行,开放了近40个public接口,我流着泪把它给改完了。
  为了防止这样的惨剧再次发生在我的身上,我觉得有必要写一篇博客来让广大程序猿同胞知道代码重构的重要性
  如果你身边有一个类写上千行的猿,一定要把此文转给ta
  为什么类不能过长?
  类过长——读不通,扩展不通读不通——直接用滚轮滚都得好几秒,就算是原作者,时间长了恐怕也难以理清整个类,更不用说是其他的读者  扩展不通——一个类有过多的接口,会让扩展这个类变得异常困难,一动千行
  类过长——可能有冗余代码
  此时CV工程师打了个冷战
  冗余代码,就是重复代码,通常出自使用Ctrl+C,Ctrl+V来生产代码的CV工程师之手,冗余代码的危害非常大:  冗余代码使方法、类过长,不简洁  冗余代码会造成发散式修改(冗余代码需要变动时,每一处Ctrl+V都需要修改)
  类过长——多半是职责过多
  一个类开放几十个接口,绝对存在职责过多的问题,就像图中的Tom猫一样手忙脚乱,一个类的职责过多也有巨大问题:
  1、 违反设计原则 ——单一职责原则(单一职责原则要求一个类只实现一个职责,比如一只Tom只做扫地、擦桌、拖地中的一件事,而其他事的实现可以转移给史派克狗或肥胖女佣),违反了这个原则会导致发散式变化、发散式修改、类过长等代码问题,还会让你的类难以扩展,甚至会让其他程序猿认为你不专业
  2、 发散式变化 (指引发此类修改的地方很多),如果一个类的职责很多,那它的扇入(调用者)一定很多,每个调用者的修改都有可能让你这个类不得不随之修改,也就是发散式变化
  就是说不管哪儿出了问题,你这个类都得遭殃
  3、 发散式修改 (指此类修改引发修改的地方很多),相同的,如果一个类职责很多,那支撑它实现的下级,即扇出(被调用方)一定很多,如果此类逻辑发生变动,所有下级被调用者可能都得随之修改,也就是发散式修改
  就是说你这个类出了问题,不管哪儿都会遭殃
  4、 难以扩展 ,如果你的一个类接口非常多,那它的子类怎么办?它的包装类怎么办?难道全部都要实现这么多接口,全部都要承担同样多的职责吗?扩展起来真的非常麻烦
  5、 触发机关 【测试之怒】【运维之怒】
  我已经写了几千行了,怎么办?
  重构——抽取冗余代码
  抽取冗余代码就是将重复代码抽取成一个独立的方法,之后再使用这段代码时就不再需要Ctrl + C,Ctrl + V,而是直接调用对应的方法即可
  这样做也可以缩短原方法,使原方法更加简洁易懂
  更值得一提的是如果这段代码需要修改,也只需修改一处,而不是发散式地到处修改
  真是一箭三雕
  使用IDEA进行冗余代码的抽取
  1.找到重复代码
  2.进行方法抽取 右键->选择重构->抽取->方法 (或者直接使用快捷键Ctrl + Alt + m)
  自动检测出个别重复代码的细微差别,有些代码可能只改动一两个变量,IDEA会自动检测出来,并在抽取方法时提醒我们,选择左侧Accept Signature Change(接受签名变动)可以使抽取的方法自动替换更多的重复点
  可以选择替换掉所有的重复代码(竟然有18处)
  3.重构——更改方法签名
  如果你对抽取出的方法的名字、参数、返回值或是修饰符不满意,不要使用Ctrl + R 修改,IDEA提供了重构方法——更改签名(快捷键Ctrl + F6)
  注意:方法的名字指的是方法做了什么,而非怎么去做,最好是 动词+名词 格式
  比如:  Tom.扫地() √  Tom.扫地With扫把() ×  Tom.用扫把扫地() ×
  重构——转移成员变量+函数(转移职责)
  将不应该由自己管理的成员变量和函数转移出去
  那就要考虑两个问题:该转移谁?转移给谁?
  来看一个图
  图中成员【偏A】被类【A】调用两次,而只被它所在的类【过长类】调用1次,因而应该转移给【A】去管理  由于函数【偏A】与成员【偏A】的亲密度较高(只调用了【偏A】),因而应与【偏A】共进退,同去留,转移给【A】  成员【偏B】和函数【偏B】也是相同道理  职责1(函数【1】和成员【偏职责1】)和职责2(函数【2】和成员【偏职责2】)由于找不到可转移的合适的类,所以应抽取出一个新的类
  注意,先决定移动哪个成员变量,然后再决定移动哪个函数
  使用IDEA转移成员变量和函数
  1.移动成员变量,鼠标选择成员变量->右键->Refactor->Move,然后选择转移至哪个类
  2.移动函数(与移动成员变量步骤相同)  重构——抽取类
  当你发现要转移的成员变量和函数找不到合适的类时(转移职责却找不到下家),要想起来,这里是程序世界,而我们程序猿就是类和对象的造物主,是时候创建一个新的类,让它来替我们分担职责(成员变量和函数)了
  使用IDEA抽取类
  重构选中要搬的成员变量和函数,右键->Refactor->Extract->Delegate(抽取一个委托者,委托他来管理这部分变量和函数,如果只有变量或只有函数,可以抽出参数对象Paramater Object或方法对象Method Object)
  不推荐抽取参数对象,因为一般参数对象是给参数多的方法用的(用参数对象取代一长溜的参数),而且如果成员变量抽取了也不会影响任何函数的话,那就是无用对象了,不如直接把他们删除掉
  2.为新类起个名,选个包吧
  3.注意
  抽取的函数和成员一定要符合一个原则,那就是被抽取函数使用被抽取成员的次数一定高于剩余函数的次数,不然违反亲密性原则(成员应归于调用它最多的类,没有理由你用的比我多还让我来管理)
  4.一些小问题
  由于抽取的函数直接使用了未抽取的对象而导致重构失败,涉及到另一个重构(使用get方法而非直接使用私有成员变量),使用此重构即可解决
  技术不分领域,思想一脉相承。

王者荣耀是不是英雄一秒就能看出来!猴子我一秒就三棍!在玩农药的时候,是不是曾经碰到过很多的小学生在你面前或者是大神面前装NB啊?其实谁不是真英雄是不是厉害的角色往往就在一秒的时间里就能看出来!猴子,猴子作为王者农药中的老牌选手,也是巨鸟多多刀塔自走棋涉嫌抄袭平安京麻将棋,正版ampampquot人设ampampquot崩塌自走棋,2019年最火爆的休闲玩法之一。在刀塔自走棋面世之前,市面上就已经出现一些低配的自走棋玩法的游戏。尽管如今这种玩法已经成为游戏的一个类别并不受法律保护,但大家还是希望刀塔自集所有优势与一身,平安京百目鬼式神登场!Hello,大家周末好。最近很多小伙伴都已经开始期待网易520公布的平安京新内容新式神和新皮肤。小编眼瞅着还没下6月,再着急也是无用,还不如安心排着资质下着棋。不过近日,决战!平安战术竞技再谱新篇?腾讯又一黑马手游开测战术竞技类手游早就成为了不少玩家手机中的必装游戏之一,无论是快节奏感的游戏模式,还是高紧张感的游戏体验,战术竞技类手游自面世以来就受到了玩家们的一致欢迎。然而,这一局面却被一款名为我的世界的脚力替代物,大家能说出几个?大家在玩我的世界的时候是不是单靠自己的脚力输出就跑满整个地图的?我想大家应该不会这么做的吧,毕竟我的世界中有很多有趣的脚力替代物,可以运送我们到我们想去的地方,今天就一起来看看我的炉石传说任务流再引热议,新版本最强任务卡,觉醒全新英雄技能炉石传说的任务体制可以说非常有趣,衍生出的任务卡组做为游戏里一种独投资性的打法,在取得任务奖励后往往能够扭转胜负。这也是早期任务流受到玩家们追捧的原因。在任务流里像任务战任务贼任务天美发布无限开放计划,王者荣耀将迎来变更,对玩家有哪些影响?近日,王者荣耀无限开放计划交流会在深圳落地,在此次交流会上,天美公布了无限开放计划,发布了三大开放内容工具开放直播开放,与AI开放,让行业与大众看到了王者荣耀未来发展的三大方向。而丧尸莫得感情?他们也曾是人!感染者背后的感人故事让玩家泪目说到丧尸,相信大家的第一印象都会是没有思想恶心嗜血。那么丧尸是否真的莫得感情呢?虽然丧尸是由人类转为了另外一种形态生存,不论好坏但它依然是一种生命的延续。那么,他们是否会保留一丝身王者荣耀盾山的御銮出场盾山玩法攻略来袭王者荣耀S16赛季出的皮肤是英雄盾山的御銮,在排位赛中出场率逐步提高,今天来看看盾山该怎么玩?盾山是一个有着修塔技能的一位英雄,而且他有着四个技能,在王者荣耀里的定位是辅助。这里推哪吒之魔童降世开启游戏联动对象居然是这两款经典IP佳作近年,网游与国产动画联动成为一种非常流行的跨界合作模式,联动的好处,一方面能提升双方IP品牌价值,另一方面也能提升品牌话题热度,可谓一举两得。像秦时明月全职高手镇魂街等人气作品,往修炼化神元婴即可不老不死?镇魔曲新版本连娃娃都能修仙!说起元婴,如果不是修真小说迷,大多数人对这个词一定是一脸懵逼的。但如果说所谓元婴者,是教练元神的过程,指修成阳神也,即是金丹。修成金丹,即指得了大道,得长生不死为注世地仙也。那么大
秋季赛暴风雨来袭极限竞速地平线5摆脱键鼠体验真实触感不知道你们是从什么渠道开始玩极限竞速地平线5的,我是从微软商店入坑,从键盘鼠标开始玩起来的,后来慢慢地过度到手柄,感觉打开了新世界的大门。那种触感是鼠标键盘感受不到的,最后随着慢慢曾与阿水齐名的Iboy,为何在面对LDL选手时都如此吃力相信大家应该已经知道了,在德杯的晋级赛当中,原本不被人看好的IG竟然以40这样优异的成绩成功晋级,而在赛前被预测是小组第一的RA却接连失利,虽然不少粉丝都觉得这只是德杯而已,没有必IG全胜成功晋级2021德玛西亚杯八强!LYA青训队伍EQX拿下首胜恭喜IG成功晋级2021德玛西亚杯八强!没想到赛前一直不被看好的IG在昨天的比赛中可以说是火力全开IG可以说是手气一直很好RNG的终极替补yuekai二队的AD出道一年便成元老的打CFHD神秘组织的更多资料,他们在迷失边城到底干什么?我们先把穿越火线的剧情先放一下啊,最近,CFHD不是更新了一个全新的地图迷失边城嘛!作为CFHD的常驻作者,我也是迅速去熟悉这张地图,但我发现这张图又出现了神秘组织的资料,他们在生STARL元宇宙游戏如何开发?STARL游戏是什么样的游戏?STARLMetaverse将是一个广阔的3D宇宙,具有逼真的图形,充满探索发现和创造。STARL的目标是创建一个安全结构化高度完善的平台,可以随着时间的推移进行模块化开发。可以包一万经济翻盘!Uzi全新出装卡莎带领队伍成功翻盘,绝境还得靠UziLPL转会期结束了,Uzi如期复出引起网友热议,电竞圈再一次因为Uzi而沸腾了起来,虽然Uzi复出,粉丝也展示出潮水般的热情,但还是难以压制外界对Uzi质疑的声音,关于Uzi复出吸国产肉鸽游戏暖雪评测没有灵魂的佳作,有所缺憾的现在各位小伙伴大家好,我是玩咖游戏卿语!2022年被许多玩家评为神仙打架的一年,但在这一年中其实不仅国外,国内游戏也在打算一展头角。对比国际,国产游戏还有很大的差距,但长足的进步的确已美军9万吨巨舰成摆设?海盗游戏ATLAS玩家造出船无钱保养在今年10月首次部署到日本的美军9万吨级米格尔基思号远征移动基地舰,最近遇到了大麻烦,处于几乎停止使用的闲置状态。米格尔基思号的重要舰船系统,被日本附近海底火山大规模喷发出的浮石碎联动杨教授猛鬼街后,黎明杀机又弄来了午夜凶铃大家好哈。黎明杀机这一游戏,作为的你追我逃游戏流派的开创者,也算是颇为经典了。虽然游戏本身不见得十分令玩家满意,可游戏制作人本身却是态度拉满,DLC出了一个又一个,几乎是有求必应,XGP会员免费游戏推荐近期用免费会员通关了帝国时代4,然后就沉迷于XGP的其他好游戏中了,也给大家推荐一下。1哈迪斯地狱之战(Hades)强烈推荐,一旦进入游戏就完全停不下来,不经意的游玩,结果这些天的从世界政经中心到全球游戏产业枢纽,伦敦的变化与不变从国际金融中心到绿色金融第一城,从欧洲人工智能之都再到全球生命科学创新中心对伦敦来说,这座闻名世界的历史古城更多的是以一种时代指向的方式为人所知。它代表了全球政治经济文化金融科技的
友情链接:快好知快生活快百科快传网中准网文好找聚热点快软件