什么是重构?

时间:2013-12-17 01:30:55

标签: refactoring

我听到无处不在的重构一词。任何编程工具都有一些关于它如何帮助重构的等等,每个程序员或经理都会告诉我一些关于重构的事情。但对我来说,它仍然听起来像一个没有任何意义的魔术词。似乎重构只是编辑你的代码或什么?

维基百科报价

  

代码重构是一种“重构现有代码体系的规范技术,改变其内部结构而不改变其外部行为”,[1]旨在改进软件的一些非功能属性。优点包括改进的代码可读性和降低的复杂性,以提高源代码的可维护性,以及更具表现力的内部架构或对象模型,以提高可扩展性。

什么?每个(任何)身体都明白吗?所有那些跟我谈论重构的人,是否确实意味着这个

为什么这个名字?什么是“保理”呢?

5 个答案:

答案 0 :(得分:7)

重构正在修改现有代码,以提高其可读性,可重用性,性能,可扩展性和可维护性。你有没有看过代码和思想,“哇这是一团糟”或“这可以做得更好”?当您开始清理代码并改进代码的不同方面时,这被视为重构。很多时候代码经常会重复,需要你创建抽象来遵守DRY原则,这是重构的另一个例子。在大多数重构过程中,重要的是不要破坏任何东西,这可以通过使用良好的单元测试来确保。

有时最好只是为了解决特定问题而建立一些工作代码。把它想象成一个粗略的草案,它只是建立了基本的想法,让你思考手头的问题。粗略草稿完成后,您将返回到代码并对其进行编辑,从而进行改进,从而产生最终副本(重构)。您最终可能会收到需要进一步修改代码的其他要求。此时循环重复。在代码中获取最初的想法,然后重新访问代码并清理它(重构它)。

重构背后的一个主要前提是代码总是可以改进。当你进行这些改进时,它就是重构。

答案 1 :(得分:1)

重构就是让你的代码更易于维护。

实际上,软件的要求不断变化,导致软件不断变化。在一段时间内,软件开始变得复杂。正如Lehman在软件演化方面所做的出色工作所正确说明的那样,“随着系统的发展,其复杂性会增加,除非工作是为了维持或减少它”。因此,我们必须定期降低软件的复杂性,这就是为什么需要重构的原因。

让我们考虑一个例子: 当一个类太庞大和/或复杂时,模块化(或上帝类)设计气味不足。如果您的设计中有这样的类,那么您将面临多个问题(例如可理解性差 - 您会发现难以理解您的代码,可靠性问题 - 因为类很复杂,您可能会错误地更改代码或在一个方面进行更改导致另一方面的错误)。因此,最好使用诸如“Extract-class”重构之类的技术来重构类。

(有关“模块化不足”的更多信息可以在“重构软件设计气味”一书中找到)

答案 2 :(得分:0)

来自维基词典:http://en.wiktionary.org/wiki/refactor

  

(计算)重写现有源代码,以提高其可读性,可重用性或结构,而不影响其含义或行为

“Refactor”也是Eclipse中工具菜单的名称。

我将在Eclipse“Refactor”菜单下解释“重命名”Eclipse工具作为工具的示例。

在Eclipse中,您可以通过突出显示变量来“重构 - >重命名”变量,右键单击并转到“重构”和“重命名”:

Eclipse: refactor -> rename

它不是手动重命名每个变量,而是检测哪些变量引用同一个对象,因此您可以一次更改所有适用变量的名称:

enter image description here

当您忘记重命名变量时,防止出现错误非常方便。

答案 3 :(得分:0)

“重构是一种改变软件系统的过程,它不会改变代码的外部行为,但会改进其内部结构。这是一种清除代码的规范方法,可以最大限度地减少引入错误的机会。实质上,当你重构时,你正在改进代码的设计。“ - Martin Fowler(Code of Smell之父)。

重构的一个例子可能是提取方法(图1):如果方法太长,应该使用这种重构技术对其进行分解。找到一堆完美的代码(在long方法中),创建一个带有描述性名称的新方法,并将代码移动到新方法中。如果使用局部变量,则需要将这些变量作为参数传递。最后一步是向新方法添加一个调用并测试代码。 Example of Code Refactoring

虽然重构不会在软件系统中添加功能或功能,但它对于开发人员的维护活动来说是一个利器。它使软件系统更易于理解,修改成本更低,而不会通过改变其内部结构来改变其可观察行为。

根据M. Fowler的重构目的如下:

  1. 重构改进了软件设计
  2. 重构使软件更易于理解
  3. 重构有助于发现错误
  4. 重构有助于更快地编程

答案 4 :(得分:0)

在以下链接中非常清楚地说明了重构:Refactoring: Guru。但是,为了快速浏览,已创建了有助于基本了解的图表-

enter image description here

相关问题