范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

求求你别再写上千行的类了,试试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方法而非直接使用私有成员变量),使用此重构即可解决
  技术不分领域,思想一脉相承。

IG冠军皮肤有多赚钱?宁王透露分成高达8位数,上海人均一套房对于英雄联盟这款游戏来说,虽然到目前为止已经有上千款皮肤诞生,但最有纪念意义的莫过于一年一度的战队冠军皮肤。而对于LPL赛区来说,S8的IG冠军皮肤则被很多人认为是赛区的荣耀。大家IG笑笑也被锤假赛?大佬替PDD发声他每一波都是实锤这段时间因为LDL假赛曝光,导致整个电竞圈受到了很大影响。其中作为老一辈电竞选手的PDD,更是因为涉及假赛遭到爆破,最终不得不选择停播避风头。不过虽然很多人都曝光了PDD涉及假赛,FPX排位之争不敌RA!关键团战金咕咕大失误,乐爷狂送都赢了经过几天忙碌的工作和学习后,我们终于迎来了LPL周末的比赛。在这次的比赛中,RA对阵FPX以及EDG对阵RNG算是两场焦点大战。相比EDG和RNG的榜首之争,RA和FPX的这场比赛RNG才是第一战队?小虎成为关键先生,纳尔一拍4让解说呐喊作为LPL春季赛的榜首之争,RNG和EDG的这场比赛吸引了许多玩家的目光。大家都知道,尽管各大战队在这个赛季都进行了补强,但整体表现都不是太好。反而是EDG和RNG这两支队伍的改变LOL公布太空律动新皮肤!大量原画曝光,至臻露露成妹子最爱?目前英雄联盟小蜜蜂宝典已经进行了一半的时间,不少玩家为了获得最后的大奖还在努力升级中。虽然小蜜蜂宝典算是良心活动,各种奖励也还算丰厚,但由于等级提高至150,导致升级难度变大了许多TES大胜BLG,JKL赛后却将受到处罚!下一个乐言成了?自从在忍界大战击败IG之后,TES战队就被许多人称为夺冠大热。虽然RNG在这个赛季异军突起,但由于TES整体实力也非常强,因此不少人认为春季赛将会成为TES和RNG的对决。而在击败EDG大胜锁定季后赛!过程太轻松引玩家热议,西卡比赛太荒唐随着LPL春季赛不断进行,不少玩家都发现了一件事情。那就是不少传统强队在这个赛季再度崛起,RNG和EDG这两支队伍展现了强大的实力,分别占据了联赛积分榜的一二名。在RNG成功锁定季EDG输给TES心态崩了?AD被打到赛后吸氧,圣枪哥自闭退群目前LPL春季赛即将进入尾声,各大战队都在为了季后赛的排名发起最后的冲刺。自从在忍界大战击败IG之后,TES似乎找到了巅峰的状态,在接下来的几场比赛中展现了非常强大的实力。成功获得IG不敌RA问题出在中路?肉鸡状态下滑明显,赛后被喷快退役作为LPL赛区曾经的荣耀队伍,IG战队在这个赛季状态下滑明显,特别是在面对TES的比赛中,他们依旧暴露了许多问题。由于赛程的关系,虽然IG大概率可以进入季后赛,但他们如果不能把握最季后赛IG双打野都输了?首轮不敌RA出局,西卡赛后捂脸崩溃经过一段时间的等待后,我们终于迎来了春季季后赛的首轮对决。虽然本次季后赛是从末尾开始打,但由于IG的排名较低,导致他们将在首场比赛迎战RA战队。根据赛程来看,IG想要夺冠必须完成一Doinb出事后掉粉15万!众多选手力挺小天,笑笑评价很真实作为S9赛季的世界冠军中单,Doinb虽然是一名外援,但在LPL赛区却拥有非常高的人气。同时由于他的直播风格风趣幽默,导致他收获了大批粉丝的喜爱,成为LPL赛区直播间粉丝最多的现役
搭载国产芯片!荣耀独立后的又一款新机,网友就这?在美国的制裁下,华为不得不与荣耀分离。然而,独立后的荣耀依然没有解决芯片短缺的问题,作为独立后的首款手机,荣耀V40却只能搭载天玑1000处理器,直接导致这款手机的销量并不是很高,PC显卡进化史2(3D初混战时代)当所有显卡都进化到了AGP接口的时候,显卡的3D时代到来了。在3D时代刚刚开始的时候,真的是狼烟四起,群雄并起。除了之前所说的S3,Trident两家老牌显卡芯片厂商,后来的SIS中古游戏漫谈DOS游戏之美少女梦工厂2这是一款霸榜N月的游戏这是一款第一代宅男的最爱这是一款老父亲的心酸系列的游戏它就是美少女梦工厂2。美少女梦工厂2我们为什么不来聊聊1代呢?因为2代是美少女梦工厂系列移植版本最多,发买前生产力,买后玩游戏!联想要统治轻薄本市场了?联想在前几天发布了小新系列轻薄本,自从出来后就一直是属于性价比产品,现在的小新产品线已经从13寸覆盖16寸。作为整个产品系列最顶级的存在,小新Pro16自然是将性价比与性能发挥到极晚点遇到你余生都是你(情头)晚点遇到你余生都是你往后余生,全部是你卦不敢算尽,畏天道无常,情不敢至深,恐大梦一场。等闲却变故人心,却道故人心易变。因为刚好遇见你,所以余生多指教。我一直在等,等一个人将我小心收盗版光盘的兴衰在上世纪的九十年代中期到宽带普及之前,对于PC党们来说,买盗版光盘是无法回避的历史。在那个互联网没有普及,即使有也是33。6或者56k拨号上网的时代,下载速度只有5k的时候。在U盘测评丨软硬件全方位升级的猎豹峡谷会成为最完美的NUC吗?英特尔11代NUC猎豹峡谷虽然外观看起来和以往的NUC一样,但仔细观察对比后就会发现不同之处非常多,处处都不相同。那么这台i7版带有无线充电的猎豹峡谷与之前的NUC相比到底升级了哪中古游戏漫谈DOS游戏之沙丘魔堡II提起RTS即时战略游戏,大家第一个想到的不是红警系列就是星际系列,或者是魔兽争霸系列。但是我们今天来聊一聊,真实确立了即时战略游戏形态的,始祖级的游戏沙丘魔堡2。沙丘魔堡II的开始矿潮下一台顶配电脑要多少钱?看完之后你还能淡定吗?自矿潮以来,电脑硬件的价格就随着虚拟货币的价格一路水涨船高。尤其是显卡,目前一块RTX3060的价格已经被炒到了7000多块钱,有谁还记得这张显卡的官方指导价只有2499元?虽然买vivo终于超越华为成为第一!iPhone12成为史上最畅销机型近日,著名调研机构Canalys发布了2021年第一季度智能手机市场出货量相关报告。国产手机厂商vivo的出货量为2160万台,同比增长79,份额占比达到23,成为今年第一季度手机中古游戏漫谈DOS游戏之皇帝养闺女,养宠物,培养明星这些游戏你是不是都玩腻了?要不要试试更刺激的?我们来养个皇帝怎么样?那么这款皇帝,你一定不要错过。在这款游戏中,你将体验到皇帝的一生,要领导你的大臣在德智体