作为开发人员,您如何开始进行新项目……?
首先,您收集一些基本需求,然后根据需求开始一个接一个地实现该功能。随着项目的进展并进一步了解它,您将不断在代码库中添加和更改代码。稍后,您还可以更改代码以修复错误和极端情况。
但是几天或几个月之后会发生什么……?您的代码看起来如何……?复杂吗?很难理解吗?如果是的话,那么肯定您没有关注改进代码或重组代码。您可能编写了一些重复的代码而没有查看现有代码,或者可能编写了一些较长的方法/函数,大型类,太多参数,非直观变量名,代码放置等。
在不更改软件功能或应用程序外部行为的情况下改进或更新代码称为代码重构。它降低了技术成本,并使代码更加有效和可维护。如果您不注意较早的代码重构过程,则稍后需要为代码中的错误付费。因此,不要忽略清理代码。
在软件开发过程中,不同的开发人员具有不同的代码编写样式。他们进行更改,维护代码,扩展代码,并且在大多数情况下,他们在不进行连续重构的情况下离开代码。未重构的代码往往会导致代码腐烂:很多 代码中的混乱和混乱,例如重复代码,类或包之间的不良依赖关系,类职责分配不当,每个方法或类的职责过多等。为避免所有这些问题,连续重构很重要。
现在的问题是……重构代码的技术是什么?
我们将讨论一些流行的通用技术来重构代码,但在此之前,我们将讨论一些快速技巧……
尖端:
- 您需要分步执行代码重构。在您的程序中进行微小的更改,每个小的更改都会使您的代码略胜一筹,并使应用程序处于工作状态。
- 在重构过程中进行少量更改后,运行测试TDD和CI。如果不运行这些测试,则存在引入错误的风险。
- 在重构过程中请勿创建任何新功能。您应该重构代码,然后再在现有代码中添加任何更新或新功能。
- 重构过程可能会影响测试结果,因此让您的QA和测试团队参与重构过程是一件好事。
- 您需要接受的是,您对代码不会完全满意。重构的代码将在不久的将来过时,您将不得不再次对其进行重构。
最常见的代码重构技术
有许多方法和技术可以重构代码。让我们讨论一些流行的……
1.红绿重构
红绿色是敏捷软件开发过程中最流行,使用最广泛的代码重构技术。该技术遵循“测试优先”的方法进行设计和实现,这为所有形式的重构奠定了基础。开发人员会主动将其重构到测试驱动的开发周期中,并按照三个区域步骤进行重构。
- 红色:第一步从编写失败的“红色测试”开始。您停止检查需要开发的内容。
- 绿色:第二步,编写足够简单的代码,并使开发通过“绿色”测试。
- 重构:在最后和第三步中,您将重点放在改进和增强代码上,以使测试保持绿色。
因此,基本上,该技术包括两个不同的部分:第一部分涉及编写向系统添加新函数的代码,第二部分涉及重构执行此函数的代码。请记住,在工作流期间,您不能同时执行两项操作。
2.通过抽象重构
当需要进行大量重构时,开发人员通常会使用此技术。主要是我们使用这种技术来减少代码中的冗余(重复)。这涉及类继承,层次结构,创建新的类和接口,提取,用委托替换继承,反之亦然。
上拉/下推方法是此方法的最佳示例。
- 上拉方法:将代码部分拉入超类并提供帮助 在消除代码重复方面。
- 下推方法:它从超类中获取代码部分并将其移动 深入到子类中。
P ULL了构造体,提取子类,提取超,倒塌的层次结构,表单模板方法,提取接口,与代表团替换继承,继承与替换代表团,压低场所有这些都是其他例子。
基本上,在这种技术中,我们为系统中需要重构的部分以及最终将要替换的部分构建抽象层。下面给出两个常见的示例…
- 封装字段:我们强制代码使用getter和setter方法访问该字段。
- 通用类型:我们创建更多通用类型以允许代码共享,将状态检查代码替换为状态,将条件替换为多态等。
3.撰写方法
在应用程序的开发阶段,很多时候我们在程序中编写长方法。这些长期方法 使您的代码极难理解和更改。在这些情况下,主要使用合成方法。
在这种方法中,我们使用简化方法来减少代码中的重复。一些示例包括:提取方法,提取变量,内联Temp,用Query替换Temp,内联方法,拆分临时变量,删除对参数的分配等。
提取:我们将代码分成较小的块,以查找和提取碎片。之后,我们为这些块创建单独的方法,然后将其替换为对此新方法的调用。提取涉及类,接口和局部变量。
内联:这种方法 删除程序中不必要的方法。我们找到对方法的所有调用,然后用方法的内容替换所有这些调用。之后,我们从程序中删除该方法。
4.简化方法
这种方法涉及两种技术……让我们同时讨论它们。
- 简化条件表达式重构:编程中的条件语句 随着时间的流逝变得越来越逻辑化和复杂化。您需要简化代码中的逻辑以理解整个程序。
重构代码和简化逻辑的方法有很多。其中一些是:合并条件表达式和重复的条件片段,分解条件,用多态替换条件,删除控制标志,用保护子句替换嵌套的条件,等等。 - 简化方法调用重构:在这种方法中,我们使方法调用更简单易懂。我们致力于类之间的交互,并且为它们简化了接口。
示例包括:添加,删除和引入新参数,用显式方法和方法调用替换参数,参数化方法,与修饰符进行单独查询,保留整个对象,删除设置方法等。
5.在对象之间移动特征
在这种技术中,我们创建了新类,并且在新旧类之间安全地移动了功能。我们对公共访问隐藏了实施细节。
现在的问题是……何时在类之间移动功能,或者如何确定是时候在类之间移动功能了?
当您发现一个类承担着太多的责任并且正在发生太多事情时,或者当您发现一个类是不必要的并且在应用程序中什么也不做时,您可以将代码从该类移至另一个类,然后将其完全删除。
例如:移动字段,提取类,移动方法,内联类,隐藏委托,引入外来方法,删除中间人,引入本地扩展等。
6.准备重构
当您注意到在应用程序中添加一些新功能时需要重构时,最好使用这种方法。因此,基本上,这是具有单独的重构过程的软件更新的一部分。如果您发现在功能开发的早期阶段需要更新代码,则可以节省未来的技术债务。
最终用户看不到工程团队的这种努力,但是在开发应用程序时,开发人员将在构建应用程序时发现重构代码的价值。如果他们只是花一些时间更早地更新代码,则可以节省时间,金钱和其他资源。
“It’s like I want to go 100 miles east but instead of just traipsing through the woods, I’m going to drive 20 miles north to the highway and then I’m going to go 100 miles east at three times the speed I could have if I just went straight there. When people are pushing you to just go straight there, sometimes you need to say, ‘Wait, I need to check the map and find the quickest route.’ The preparatory refactoring does that for me.”
Jessica Kerr (Software Developer)
7.用户界面重构
您可以在UI中进行简单的更改并重构代码。例如:对齐输入字段,应用字体,活动语音中的reword指示格式,应用通用按钮大小以及增加颜色对比度等。
最后的话
您需要将代码重构过程视为清理井井有条的房子。家庭中不必要的混乱会造成混乱和压力大的环境。书面代码也是如此。干净且组织良好的代码始终易于更改,易于理解且易于维护。如果您较早地注意代码重构过程,以后就不会遇到困难。
两个最有影响力的软件开发人员Martin Fowler和Kent Beck花费了很多时间来解释代码重构过程及其技术。他们还编写了有关此主题的完整书籍:重构:改进现有代码的设计。本书描述了各种重构技术,并对在这些重构过程中的工作进行了清晰的解释。如果您想深入了解代码重构过程,建议您阅读本书。