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

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

迷你世界萌眼星难度太高怎么办?学会这一招,轻松攻克迷你世界出现了星战系统之后,懂得玩家都知道,先要去萌眼星进行挖矿。不过在萌眼星挖矿的时候,会发现一个很尴尬的事情。那就是不少矿石,在地表,是很常见的。但是在地下打洞寻找的时候,却很Khan悄悄改了韩服名字?翻译过来尽是辛酸还剩两次机会最近khan悄悄改了自己的韩服名字,不少观众出于好奇进行了翻译,想要看看khan到底改成了什么名字,但翻译的结果令人惊讶,khan改的名字叫做还剩两次机会。结合他刚从MSI失利的问赛博朋克2077游戏世界朱迪和帕南你选哪一个?本文涉及一部分剧透,敬请原谅巫师3有叶奈法和特丽丝,赛博朋克2077自然也是不甘落后,游戏支线中会为玩家介绍两名符合玩家审美的女性,朱迪和帕南,两人一个潜藏于丽姿夜总会的地下室,终对比巫师是进步了还是退步了?赛博朋克2077一周目体验12月10日,普天同庆,万人空巷,2077终于上线。一小时在线人数突破八十万,一天时间收回成本并盈利,这款游戏创造了一个神话,让无数游戏厂商望而项背的神话,有种倚天一出谁与争锋的感空洞骑士游戏推荐其貌不扬,却蕴藏传奇的故事我们热爱游戏的原因是什么?是因为游戏中非常棒的故事体系,是因为游戏中数以百计的成就,是因为千锤百炼之后逐渐熟练地技术,是因为在真实与虚幻之间的炫酷场面,这些是我们沉迷于游戏世界的原星际拓荒游戏推荐未知是人类最大的梦想和恐惧人类的未知现如今最引人乐道的是那两样?一个是海底,一个则是宇宙,而相比于宇宙,海底的未知要稍微好一点,现如今人们已知的有最深海底的深度,进入海底需要面临的困境,未知的是什么?不知道狂怒2游戏推荐让人不由自主加快节奏的废土风格游戏如果说到废土风格游戏,那么我们首当其冲会想到哪一款?是大名鼎鼎的辐射系列?还是有影视为其开路的疯狂的麦克斯?亦或者是残酷的地铁系列,也有可能是另类画风的无主之地,这些都是废土系列题血污夜之仪式游戏推荐恶魔城虐我千百遍,我待恶魔城如初恋五十岚孝司的恶魔城或多或少都会影响我们的过往童年,这个系列质量之高足以让我在懵懂的童年时光中记忆犹新,虽然当初对于第一次接触的晓夜圆舞曲并不是那么的喜欢,反倒是对炸弹人和大锤恐龙抱古墓丽影11暗影游戏推荐人变胖了,心也变狠了古墓丽影三部曲,第一部天人之作,第二部差强人意,到了第三部,难免有一点让人发出江郎才尽的感叹,是这三部游戏一点一点变差了吗?似乎不是,我们试想把三部曲的顺序调换一下,难道还会觉得第掠食游戏推荐反转反转再反转,猜不到的才能有足够的惊讶我们为什么要探索宇宙?这个问题也许无数人都扪心自问过,为了求知欲?新的元素,新的生存环境,新的生命体,为了荣耀感?犹如阿姆斯特朗在月球上留下第一个脚印那样载入史册,为了野心?我们的黑手党游戏世界游戏中最滑稽的反派,历史上最狡猾的罪犯在黑手党第一代重置版中,我们着重体验的是汤米的矛盾和黑帮成员的生活,由于游戏时间每一章节衔接的不是很圆满,让我们对于游戏剧情的前后关联了解的不是很透彻,但游戏的主题目标还是向我们表
马超教学第一期(被动技能)1马超能提升移速的方法有出装铭文与技能,同时还能与其他英雄的技能联动,如孙膑的二技能等。2马超在拾取标枪之后会出现两次闪光状态,第一次是捡到标枪,马超获得强化普攻,开始提升移速第二电子游戏对大脑的影响有科学证据吗?专家称隔离期父亲育儿能提升娃智商编者按玩电子游戏已成为世界上最受欢迎的娱乐活动之一。电子游戏通常是减轻压力与朋友交往和消磨时间的一种愉快方式。疫情期间,如果遇到隔离,封闭的空间环境王者荣耀几个例子告诉你,现今游戏内的玩家水平到底有多低不知道大家有没有一种感觉,那就是如今的王者荣耀,游戏内的玩家水平是真的低得有点可怕了,并不是说玩家的整体水平低,而是说现在的王者荣耀,很多很高的段位,你所遇到的队友或者对手,其实力王者荣耀角色性格大家都知道,王者荣耀是一个5v5的游戏。战场分路分为上中下打野游走五种。这里不考虑游戏这么大,从玩家性格角度分析玩家适合怎样的角色。中路,占最好的资源,负责前期爆发带节奏。后期爆发全民领主开局传国玉玺领主文种田文明争霸兵种。秦时穿越到全民可成为领主的无尽世界,激活传国玉玺,获得天命所归文治武功风调雨顺大兴土木劝课农桑百家争鸣一系列BUFF。招募华夏特色兵种,魏武卒秦锐士汉羽林金老爹的热狗店(附攻略)老爹的热狗店是一款休闲模拟经营类游戏,游戏不仅拥有着全新卡通清新的画面来呈现人物场景以及各种道具食物,让一切看起来都那么美妙和诱人。而且相比较于传统经营模式游戏的基础来说,该款游戏传奇手游各版本玩法和技巧,让你不费钱就堪比土豪玩家哈喽各位老铁们,小编来给大家分享传奇资讯啦!传奇至今更新了无数个版本,玩家们最爱的还是1。76版本,升级打宝还是有难度的。如今的传奇都倾向氪金,游戏里也有一些不充钱的玩家,并且依然miHoYo新作崩坏星穹铁道二测招募开始2021年10月5日,上海miHoYo新作崩坏星穹铁道消息公开,10月8日正式开启第一次测试招募,顿时获得了众多的热议。那么,首先,我们先来了解一下miHoYo到底是何方神圣,为什一念逍遥4月26号新增天机密令两条2022年4月26日,新增天机密令一条(黄色背景为新增),逐个复制下行红色文字,在设置,天机密令栏兑换四月份天机密令娜扎666君如天上月从此逍遥出世尘风月如剑人生得意须尽欢道不尽仙RNG勇夺冠军出征MSI,TES让二追三功亏一篑2022LPL春季赛迎来终极一战RNGvsTES,最终RNG全员状态火热,32击败TES夺冠,拿到队史第四座春季赛冠军的同时也将代表LPL赛区以线上形式参加今年的MSI,和T1竞争魔兽世界开发商动视暴雪指责微软收购后董事会未增加女性成员据Axios报道,动视暴雪将再增加两名女性作为董事会成员。此举将使动视董事会中的女性人数增加一倍,达到4人。目前有8名男性董事会成员,但其中两名将在今年卸任。目前在通讯公司Subs