我经常从专业人士博客那里听到类似于有机会重构代码的事情.究竟是什么?用更简单和更少的行重写代码?这样做的目的是什么?
mjv*_*mjv 11
这篇维基百科文章将让您了解重构的一般概念中包含的事物类型.
我们的想法是随时调整/改进您的代码.简单的事情可能是重命名变量或方法参数,但其他可能是传递一个额外的参数或删除一个参数或更改其类型.数据模型也可能会发展.等等
通常,重构与单元测试密切配合,通过自动测试可能发现这样的问题(提供良好的覆盖范围和相关的测试用例),可以抵消"破坏某些东西"的风险. ).
简而言之,重构(以及顺便提一下,IDE的大多数IDE或附加组件,提供各种工具,使重构更容易,更不容易出错)的能力使得人们可以更快地编写而不必强调某些决策("应该这个对象包括一个数组或一个列表等......)让程序员随着时间的推移改变其中的一些决定,并通过一个可行的,如果不是完美的解决方案提供额外的洞察力.参见一个相关的概念:敏捷开发.
注意,重构不会给你开始编码的许可,而不会在设计,对象模型,API等中加入任何想法,但是它会减少一些决策的僵硬性.
Martin Fowler可能在推广重构方面做得最多,但我认为优秀的开发人员总是进行这些重组.查看Fowler的重构网站和他的1999 Refactoring,它是使用Java进行特定重构的优秀介绍和目录.
我看到他是全新的Refactoring,Ruby Edition的合着者,它应该是一个很好的资源.
我发现定期清理你的代码使得它更清晰,更易于维护.
举一个例子,我编写了一个小型(Java 1.6)客户端库,用于访问远程Web服务(使用REST架构风格).该库的大部分位于一个源文件中,其中大约一半处理Web服务,而另一半是响应的简单内存缓存(性能).随着时间的推移,两半的功能都在增长,直到源文件变得过于复杂.所以今天我使用Fowler的"Extract Class"重构来将缓存逻辑移动到一个新类中.在此之前,我必须做一些"提取方法"来隔离缓存逻辑.在此过程中,我做了一些"重命名方法"和"介绍解释变量".
正如其他人所指出的那样,在进行每次更改后,要进行一系列良好的单元测试非常重要.它们有助于确保您不会引入新的错误,以及其他好东西.
简而言之,重构意味着改进软件的设计和/或实现,通常不会改变其行为.通常这样做是为了使代码更容易理解并继续使用,从而使未来的开发更快,更容易出错.
重构是对代码的长期投资 - 因为它不会影响软件的外观"外观",通常会有压力(从管理层等)到"只是让它工作并继续下一步"事情." 虽然这有时可能是正确的决定,但取决于业务驱动因素,经历变化但从未被重构的代码库将会陷入困难的混乱状态(参见技术债务).
具体而言,重构的主要原因通常如下: