"重构重构重构你的代码." 这究竟意味着什么,为什么呢?

aog*_*ghq 12 refactoring

我经常从专业人士博客那里听到类似于有机会重构代码的事情.究竟是什么?用更简单和更少的行重写代码?这样做的目的是什么?

And*_*ith 12

重构代码是一个清理代码,减少混乱和提高可读性而不会导致任何副作用或功能更改的过程.

基本上,您通过应用一系列代码更改规则来重构,这些规则可以提高代码可读性和可重用性,而不会影响逻辑.

在重构之前和之后始终进行单元测试,以确保您的逻辑不受影响.


mjv*_*mjv 11

这篇维基百科文章将让您了解重构的一般概念中包含的事物类型.

我们的想法是随时调整/改进您的代码.简单的事情可能是重命名变量或方法参数,但其他可能是传递一个额外的参数或删除一个参数或更改其类型.数据模型也可能会发展.等等

通常,重构与单元测试密切配合,通过自动测试可能发现这样的问题(提供良好的覆盖范围和相关的测试用例),可以抵消"破坏某些东西"的风险. ).

简而言之,重构(以及顺便提一下,IDE的大多数IDE或附加组件,提供各种工具,使重构更容易,更不容易出错)的能力使得人们可以更快地编写而不必强调某些决策("应该这个对象包括一个数组或一个列表等......)让程序员随着时间的推移改变其中的一些决定,并通过一个可行的,如果不是完美的解决方案提供额外的洞察力.参见一个相关的概念:敏捷开发.

注意,重构不会给你开始编码的许可,而不会在设计,对象模型,API等中加入任何想法,但是它会减少一些决策的僵硬性.


Jim*_*ans 8

Martin Fowler可能在推广重构方面做得最多,但我认为优秀的开发人员总是进行这些重组.查看Fowler的重构网站和他的1999 Refactoring,它是使用Java进行特定重构的优秀介绍和目录.

我看到他是全新的Refactoring,Ruby Edition的合着者,它应该是一个很好的资源.

我发现定期清理你的代码使得它更清晰,更易于维护.

举一个例子,我编写了一个小型(Java 1.6)客户端库,用于访问远程Web服务(使用REST架构风格).该库的大部分位于一个源文件中,其中大约一半处理Web服务,而另一半是响应的简单内存缓存(性能).随着时间的推移,两半的功能都在增长,直到源文件变得过于复杂.所以今天我使用Fowler的"Extract Class"重构来将缓存逻辑移动到一个新类中.在此之前,我必须做一些"提取方法"来隔离缓存逻辑.在此过程中,我做了一些"重命名方法"和"介绍解释变量".

正如其他人所指出的那样,在进行每次更改后,要进行一系列良好的单元测试非常重要.它们有助于确保您不会引入新的错误,以及其他好东西.


Eri*_*ohl 6

简而言之,重构意味着改进软件的设计和/或实现,通常不会改变其行为.通常这样做是为了使代码更容易理解并继续使用,从而使未来的开发更快,更容易出错.

重构是对代码的长期投资 - 因为它不会影响软件的外观"外观",通常会有压力(从管理层等)到"只是让它工作并继续下一步"事情." 虽然这有时可能是正确的决定,但取决于业务驱动因素,经历变化但从未被重构的代码库将会陷入困难的混乱状态(参见技术债务).

具体而言,重构的主要原因通常如下:

  1. 摆脱重复的代码
  2. 通过从较长方法的部分中提取新方法,将长方法分解为较小的方法
  3. 将具有太多职责的类分解为更小,更有针对性的类或子类
  4. 将方法从一个类移动到另一个类.通常这样做是因为方法与它们操作的数据位于同一类中.