首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当使用extract方法重构时,应该提取到新类中还是提取到当前类中?

当使用extract方法重构时,应该根据具体情况来决定是提取到新类中还是提取到当前类中。

如果提取的代码逻辑与当前类的职责无关,或者提取后的代码逻辑可以作为一个独立的功能模块存在,那么应该将其提取到新类中。这样可以提高代码的可读性和可维护性,使代码结构更加清晰。

如果提取的代码逻辑与当前类的职责密切相关,并且提取后的代码逻辑不具备独立性,那么可以将其提取到当前类中。这样可以避免引入过多的类和复杂的类关系,简化代码结构。

无论是提取到新类中还是提取到当前类中,都需要注意以下几点:

  1. 提取后的代码逻辑应该具备单一职责原则,即每个类或方法只负责一项功能。
  2. 提取后的代码应该经过充分的测试,确保其功能正确性和稳定性。
  3. 在提取到新类中时,可以考虑使用面向接口编程的方式,提高代码的灵活性和可扩展性。
  4. 在提取到当前类中时,可以使用私有方法或内部类的方式进行封装,避免对外暴露不必要的细节。

腾讯云相关产品推荐:

  • 云函数(Serverless):腾讯云云函数是一种无需管理服务器即可运行代码的计算服务,可用于处理提取后的代码逻辑。
  • 云数据库 MySQL 版:腾讯云云数据库 MySQL 版是一种高性能、可扩展的关系型数据库服务,可用于存储提取后的数据。
  • 云原生容器服务:腾讯云云原生容器服务是一种高度可扩展的容器管理服务,可用于部署和运行提取后的代码。
  • 云安全中心:腾讯云云安全中心是一种全面的云安全解决方案,可用于保护提取后的代码和数据的安全。

以上是腾讯云相关产品的简介,更详细的产品信息和介绍可以参考腾讯云官方网站:https://cloud.tencent.com/

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

读《重构:改善既有代码的设计》

随时随地的重构,也就是从一开始就进行小范围的重构,就不至于时间久后没法平滑的重构了 上面这句实际上是个方法论级别的,真实还是没办法判断什么时候要进行重构,于是换成:当代码中出现了坏味道需要重构 什么是坏味道...重构能组织良好的结构,良好的结构能让调优工作更轻松 重新组织函数 Extract Method(提炼函数) 内部逻辑过分缠绕在一起,需要将一些代码抽取到子函数 Inline Method(内联函数...,需要看情况,比如看的名称、职责定义 Extract Class(提炼) 包含大量函数、数据,需要考虑拆分类 Inline Class(将内联化) 某个的职责不足以成为一个,考虑将这个合并到其他...Pull Up Method(函数上移) 多个子类存在相似的函数,需要分析下是否需要将这些相似的函数提取到 如果完全相同,那就直接提取到 如果只是某个步骤不通,则通过模板方法把公用逻辑提升到父...Replace Inheritance with Delegation(以委托取代继承) 子类发现实际不需要使用集成来的数据、函数,或者只用到了少数父的数据、函数,则可以去掉继承关系,在当前中加上父引用

63640

如何写一个清晰明了的bug

if的代码行数过多时,这会就需要把可以独立成为方法的逻辑抽取成一个private的方法(也可以是public等),代码过长,我们总是需要这样去做,这样可以让你的主方法就像一篇文章一样具有可读性。...三组 上面的第二法则是抽取一个private方法,还没有出。当我们抽取到一定地步,会发现适合单独成的时候,应该把之前的这些private方法移动到一个。...在重构前的代码大体是这样的: 这样的处理方式还不错。但状态变多时,你就会一直扩张这个callback方法,这显然不是一种好的方案。为此你需要使用一个设计模式来改善现在的实现。...现在我们就尝试使用状态模式来重构我们的代码。...最终callback方法就只需通过newInstance就可以找到具体状态的回调逻辑,而以后即使状态在不断的增加的,你也只需新建一个的实现状态,然后注入工厂,做到了可插拔。

67930

代码重构(二):重构规则

在对进行重构,也是有一些章法可寻的,本篇博客就结合着相关示例,对重构进行相关的介绍。当然在本篇博客中使用的实例,还是延续上一篇文章的风格,仍然采用Swift语言进行编写。...一、Move Method----方法迁移 关于Move Method,首先谈论一下为什么要进行方法的迁移。原因很简单,就是方法不适合放在当前,就应该为该方法寻找合适下家。...此时就应该将该方法搬移到其高度依赖的。 在给方法搬家需要做的就是在方法的新家中创建一个方法,实现要搬移的功能,如果新创建的函数需要旧的数据,那么就创建一个委托对象来解决这个问题。...说白了就是在另一个创建一个相同的功能的函数,将旧函数变成一个单纯的委托函数,或者将旧函数完全移除。搬移后,我们可以再使用函数的重构规则对组的函数进行重构。...重构方法就是在Book创建一个charge()函数,将Switch语句块放入的charge()函数。然后在原来的charge()函数使用Switch语句时调用的charge()方法

1.3K100

IntelliJ IDEA 复杂的重构技巧(二)

方法中提取方法 这是用来快速复用一段代码的功能,名叫 “Extract Method” 。...比如,我现在有这么一段业务代码(顺带一,这是在 Java 调用动态语言 API 使用的最健壮的处理数值类型的方法): liceEnv.defineFunction("run-later", ((metaData...从中提取接口 比如,我们有这么一个 Java (最近突然觉得,对类型的注解应该比可见性修饰符更靠近类型(比如在一个方法, 我就可以用这种方法来区分对返回类型的注解(比如 @NotNull)和对方法本身的注解...然后我们希望把这三个方法都抽取到接口里面去,于是就勾选下面的三个方法。请根据实际需求勾选需要抽取的方法。 最后回车。...只需要勾选我们要送给接口(或者父)的方法,然后回车就好了。 IntelliJ IDEA 会给你加上 @Override 修饰符,和生成的抽象方法

1.5K50

设计模式之美笔记(一)

经常出现违反LSP的场景,父定义的 withdraw() 现函数的注释是这么写的:“用户的现金额不得超过账户余额……”,而子类重写 withdraw() 函数之后,针对 VIP 账号实现了透支现的功能...:提高代码的可测试性第三轮重构:编写完善的单元测试第四轮重构:所有重构完成之后添加注释 @VisibleForTesting 某个只是为了单元测试而不是私有的时候而暴露出来 程序出错该返回啥?...深拷贝的两种方式,第一种就是将这个引用对象里的进本类型都进行赋值带的对象,递归拷贝。 通过序列化,进行深拷贝。...先将对象序列化到内存,然后再反序列化读取到的对象 结构型设计模式 结构型设计模式主要就是解决和对象之间的关系 代理模式 在不改变原始的情况下下增加的逻辑,其中的思想也就是单一原则。...一个原始会被多个装饰器进行装饰,且各个装饰器所装饰增强的函数不相同,那么我们可以通过再抽出公共方法,在对原始进行集成。其主要目的就是进行重复代码的减少。

78330

IntelliJ IDEA 2023.1正式发布,Maven项目大提速&支持Apache Dubbo

比如本例,如果使用equals方法,sb先执行toString(),而StringBuilder的toString()方法执行了new操作,多产生了一个String中间对象: 这必然就降低了一丢丢性能...以后String和CharSequence类型进行相等判断,推荐使用contentEquals()方法,比equals方法更好。...支持多返回值的Extract Method 将多行代码提取到一个方法里,是开发借助IDEA常见的操作,合理使用能把逻辑编排得更清晰,降低理解成本。...,按下command + option + m即可按照IDEA的提示完成方法提取操作 若多个返回值,则先搞个private static的内部静态来装载结果 将选中的代码放到提取的方法体内,返回刚定义的静态内部类对象...很适合想整个IDEA同比例放大的情况,如团队分享UP主直播编码。 VM Options字段的自动补全 这个功能还不错,早就应该提供了,不然每次都得CV,效率不高。

1.8K121

手机QQ空间iPhone X适配总结

除此之外,屏幕不再是方形的,而是圆角矩形,使用的图标也是@3x,和现在的plus机型一样。屏幕的比例也和现在机型不再一样,所以在做全屏的渲染需要考虑裁剪加黑边的情况,如下图所示。...size为0,可能会出现控件布局错乱,因此最稳妥的方法还是判断是否iPhone X返回一个常数,如下所示。...根据官方设计规范,我们需要将界面内容分为两:纯展示的和可交互的。...前者可能是图片、文字等信息,而后者大多是button等控件,如上图的tabbar,我们就需要将其往上,该区域高度为34pt,获取方法如下所示,由于用到了safeArea,需要加上iOS11的判断。...需要注意的坑 关于TabBar高度,在VC的viewWillAppear取到的是默认原始高度49,而到了viewDidAppear取到的高度为83,这就导致了在popVC可能底部tabbar发生一个从下到上的跳动

1.8K30

Python——Scrapy初学

但是关于scrapy爬虫框架整体的使用方式和流程目前还是正确的,可以进行参考。根据慕课网现有的页面结构做了一些改动可以成功实现。...-start_urls: 包含了Spider在启动进行爬取的url列表。 因此,第一个被获取到的页面将是其中之一。 后续的URL则从初始的URL获取到的数据中提取。...我们在上文说过,爬取的部分在MySpider的parse()方法中进行。 parse()方法负责处理response并返回处理的数据以及(/或)跟进的URL。...在Shell尝试Selector选择器 为了介绍Selector的使用方法,接下来我们将要使用内置的Scrapy shell。...在Python编写,由于没有学习过Xpath,所以我先在cmd编写试验得到正确的返回结果后再写入代码,注意shell根据response的类型自动为我们初始化了变量sel,我们可以直接使用

1.9K100

一文读懂微服务架构的重构策略

绞杀者应用程序是一个由微服务组成的应用程序,通过将新功能作为服务,并逐步从单体应用程序中提取服务来实现。随着时间的推移,绞杀者应用程序实现越来越多的功能,它会缩小并最终消灭单体应用程序。...在重构单体,你有时可能会使用第二种策略,但你肯定会使用第三种策略,因为它能实现将功能从单体迁移到绞杀者应用程序。 下面让我们来看一看这些策略。...集成胶水由服务的适配器和使用一个或多个进程间通信机制的单体组成。 图3通过提取服务来打破单体。你可以识别一系列功能,包括业务逻辑和适配器,以 取到服务。你将该代码移动到服务。...你甚至可能需要拆分类,以将功能移动到服务。对了,你还需要重构数据库。 提取服务通常很耗时,尤其是单体的代码库很混乱。因此,你需要仔细考虑要提取的服务。...延迟并可能避免进行这些昂贵更改的一种好方法使用类似于《数据库重构》一书中描述的方法重构数据库的一个主要障碍是更改该数据库的所有客户端以使用新模式。

65310

代码重构的场景总结

Move Method----方法迁移 遵守“单一职责”原则,方法不适合放在当前,就应该为该方法寻找合适下家。移到与方法耦合大的。...一个方法被其他使用比在它所在使用还要频繁,我们就需要使用迁移方法重构了——将方法迁移到更频繁地使用它的。...Move Field----搬移字段 当在一个的某一个字段,被另一个的对象频繁使用时,我们就应该考虑将这个字段的位置进行更改了 Extract Class----提炼 一个如果过于复杂,做了好多的事情...在继承的体系多个使用了相同或类似的方法,就可以考虑将该方法取到,没有基就创建一个。字段提升同方法。 降低方法 即父抽象方法让多个子类实现。...在重构的过程发现名,方法名在当前版本不符合它的功能含义,就该考虑对其重新命名。 补加注释 对于全局变量,公用函数,逻辑复杂的地方添加注释,弥补之前的遗漏。

70330

代码重构(一):函数重构规则

在一次的需求,你添加了某些功能模块,但这些功能模块有可能在下一次需求不在适用。或者你因为需求迭代与变更,使你原有的方法或者变得臃肿,以及各个模块或者层次之间耦合度增加。此时,你要考虑重构了。...在拆分子函数,我们要为该函数起一个与改代码块功能相符合的名字。也就是说当你看到该函数名字,你就应该知道该函数是干嘛的。 下方代码段就是我们重构后的。...八.Replace Method with Method Object----以函数对象取代函数 一个特别长的函数,而且函数中含有比较复杂的临时变量,使用上述那些方法不好进行重构,我们就要考虑将该函数封装成一个了...这个对应的的对象就是函数对象。我们可以将该场函数的参数以及临时变量转变成的属性,函数要做的事情作为方法。将函数转变成函数后,我们就可以使用上述的某些方法的函数进行重构了。...3.接着,我们就可以在的Discount的compute()方法使用我们上述介绍的规则进行重构

1.5K50

Scrapy笔记四 自动爬取网页之使用CrawlSpider

callback参数:link_extractor获取到链接参数所指定的值作为回调函数。  callback参数使用注意: 编写爬虫规则,请避免使用parse作为回调函数。...于CrawlSpider使用parse方法来实现其逻辑,如果您覆盖了parse方法,crawlspider将会运行失败。 follow:指定了根据该规则从response提取的链接是否需要跟进。...shell验证 开始编写代码之前,使用scrapyshell查看使用SmglLinkExtractor在网页取到的链接: scrapy shell http://blog.csdn.net/u012150179...SgmlLinkExtractor查看在当前网页获得的链接: item=SgmlLinkExtractor(allow=(‘/u012150179/article/details’)).extract_links...注意:在shell并不对提取到的link进行跟进。 在这里不得不提的就是scrapy shell是对调试、验证很有用的交互工具。应该掌握。 在shell中进行了验证后进入写代码阶段。

69010

Resharper上手指南

试想一下这个场景,当你脑子里冒出这个念头,啊,这个应该提出接口来,要这个方法,这个,和这个,还有这两个事件。啊,不行,我现在就得,不然就忘了。我得新建一个接口,点哪个来着。...不过提示你,光标停留在一个类型上,要慎用Alt+F7,假设是一个string,你应该能想象到得找到多少个使用。...还有这下面一些,则是Visual Studio原生确实没有的: 当你写一个的字段,比如string _field; Resharper会自动地在前面为你加上private,也许有的人觉得多余,但我觉得是应该的...全部都支持(但Resharper的重构远不止这些),它们对应的变成了:  1.封装字段 —— Introduce Field  2.提取方法 —— Extract Method  3.提取接口 ——...而你要使用支持 dispose对象,最好的方法使用using块。(卖蛋糕的,当我知道我的代码不是最优的时候,我总是寝食难安),这里自然也有把代码扩到 region块的功能,也是常用功能之一。

1.7K60

重构:勿以善小而不为

许多细小的重构看似无足轻重,例如方法重命名,提取方法,即使重构了,似乎对代码的结构也没有太大的影响,于是就决定淡然处之,心里想“事情还未到不可挽回的地步,实现功能要紧,至于重构还是以后再做吧!”...它分散在多个测试步骤,有的放在AddUpdateCustomerSteps,有的则被提取到AbstractSteps。...不过,这种方式需要我们手动地去修改所有依赖点;另一种做法则是先通过提取方法的方式,将原有getMessageFor()的所有实现提取到一个私有方法,然后再直接利用修改方法签名的重构手法(快捷键为Ctrl...当然,也有一种取巧的办法,就是将这些代码结合Extract Method与Move Method重构手法,再转移到我们引入的ResponseMessage,因为在我们之前的分析,已经明确这些分支判断逻辑应该封装到...所以,在下决心打磨代码质量之前,还是先找好重构这块磨刀石,并放到自己随时伸手可及的工具箱吧。

31220

代码重构(六):代码重构完整案例

在封装新方法,要给这个方法名一个恰当的函数名,见名知意。 ? 下方这块代码就是我们对上面这两个红框的代码的提取。在提取,将依赖于statement()函数的数据作为函数的参数即可。...观察这两个重构后的方法我们不难看出,这两个封装出来的方法都需要一个参数,这个参数就是Rental的对象。也就是这两个方法都依赖于Rental,而对该函数所在的当前不太感冒。...出现这种情况的原因就是这两个函数放错了地方,因为这两个函数放在Customer不依赖与Customer而依赖于Rental,那就足以说明这两个方法应该放在Rental。...六、使用“多态”取代条件表达式 在我们之前的博客对条件表达式进行重构,提到了使用的多态对条件表达式进行重构。...我们对Movie的getCharge()方法的Switch-Case结构观察,我们很容易发现,此处完全可以使用的多态来替代(具体请参见《代码重构(四):条件表达式重构规则(Swift版)》)。

1.8K70

【方向盘】使用IDEA的60+个快捷键分享给你,权为了效(重构篇)

图片 选中nums后按下此快捷键,即可将其提取到方法参数里,效果如下: Extract Method Action Name Key Extract Method… command + option...✌Refactor重构 正所谓重构爽,出错火葬场。即使它的“风险性”比较高,但相信“有追求”的程序员依旧乐此不疲。 其实Java语言对重构是非常友好的,这是强类型语言的最大优势之一。...通过上面这张截图应该了然于胸了吧 Move Action Name Key Move… f6 移动静态方法、移动静态全局变量,将它从A移动到B。注意:移动的对象必须是static静态的。...不过,一般来讲,使用普通删除即可,方便快捷。 ✍总结 本文继续介绍了IDEA 重构相关的快捷键,结合Java强类型语言的特性,正确的使用IDEA提供的重构功能,能够控制风险,大大降低重构的“难度”呀。...在我认为,一个coder需要提升,就应该“多多重构”自己的or别人的代码,这时本文的这套快捷键你值得拥有。 还是补上那句话:快捷键没有任何技巧性,练就完了!

74340

八、HikariCP源码分析之ConcurrentBag一

, 继续循环获取 //⑥ //循环完一遍连接池(也可能循环多次, 如果正好在第一次循环完连接池后有连接加入, 那么会继续循环), 还是没有能拿到空闲连接, 就请求创建的连接...borrow(long, TimeUnit) 或者 reserve(T)方法取到的连接 * 也就是说, 这个方法只能移除处于使用中和保留状态的连接...borrow方法borrow方法应该是整个 HikariCP 中最最核心的方法,它是我们从连接池中获取连接的时候最终会调用到的方法,一切秘密都在这里了。...说到这里,可能会有同学问了:sharedList中保存了所有的连接,当用户借走了一个连接,不是应该把这个连接从sharedList移除,然后还回来的时候再把连接加入到sharedList?... HikariCP 运行在容器,会使用弱引用,因为在容器重新部署的时候,可能会导致发成内存泄露,具体大家可以看下#39 的 issue。

74220

攻击者侵入系统后如何提升账户权限:权技术详细分析

由于这种权操作非常的简单,因此也是攻击者最常使用的一种方式。然而这种方法的弊端也显而易见,就是依赖运气的成分较大。...另一种方法是拦截用户的凭据信息,并将这些凭据用于跨网络的其他服务。 大多数常见方法都失败,攻击者还会继续尝试其他类型的权手段,但这也意味着攻击者需要花费更多的精力和时间。...通过获取到的远程shell利用一些内置命令,攻击者枚举了当前的用户组和安全更新信息。如图1所示: ?...因此,我们又使用了systeminfo命令来获取当前系统的补丁情况,并将补丁信息导入到patches.txt的文本。...最终创建了一个的session会话(session 16),并且攻击者也因此获取到了完全控制目标系统的最高权限。

1.8K30

Scrapy Crawlspider的详解与项目实战

CrawlSpider继承于Spider,除了继承过来的属性外(name、allow_domains),还提供了的属性和方法: Rules CrawlSpider使用rules来决定爬虫的爬取规则,...callback: 从Link Extractor每获取到链接,参数所指定的值作为回调函数,该回调函数接受一个response作为其第一个参数。...注意:编写爬虫规则,避免使用parse作为回调函数。由于CrawlSpider使用parse方法来实现其逻辑,如果覆盖了 parse方法,crawl spider将会运行失败。...process_links:指定该spider哪个的函数将会被调用,从link_extractor取到链接列表将会调用该函数。该方法主要用来过滤。...process_request:指定该spider哪个的函数将会被调用, 该规则提取到每个request都会调用该函数。

1.9K20

重构-改善既有代码的设计之代码的坏味道举例说明

Extract Class) 将不相关的功能提取到独立的,让每个专注于单一的职责。...一个应该关注自身的职责和功能,而不是过度关注其他的属性和数据。方法过于关注其他的职责不清晰,难以理解和维护。 代码重复和冗余:依恋情结可能导致代码的重复和冗余。...需要修改或扩展功能,由于方法过于依赖其他的特性和数据,修改点会分散在多个,增加了修改的复杂性和风险 解决办法:将方法移到更合适的 Data Clumps(数据泥团) 多个数据项经常一起出现...(Extract Class)将相关的数据项提取到一个,形成一个独立的客户。...为了解决不完整的库的问题,可以考虑以下重构方式: 扩展库:创建一个,继承库并添加缺失的方法或功能。

9510
领券