你是小步重构吗?

时间:2009-01-17 20:34:02

标签: coding-style refactoring

在阅读了福勒的“重构”一段时间后,我仍然经常发现自己“我应该以较小的步骤完成这项工作”。 - 即使我没有破坏我的代码。

以小步骤重构是安全的,但需要花费时间。这是速度和风险之间的权衡 - 我试图在选择我的重构方式时保持战略性。

尽管如此:大部分时间我都在用更大的步骤进行重构。如果我参考福勒的“力学”部分并比较我的工作方式,我可能会发现我经常一步向前迈出两到五步。这并不意味着我是一名重构大师。我的代码可能会在5到60分钟内被破坏或无法编译。

您是否以较小的步骤重构并尝试以较短的频率生成完整的代码?而且:你成功做到了吗?

10 个答案:

答案 0 :(得分:6)

Martin Fowler似乎倾向于采用小型渐进式重构方法。然而,在读完他的书后,他偶尔会做一些激烈的步骤,但只有进行单元测试才能备份代码。

  

重构是一种用于改进现有代码库设计的受控技术。它的本质是应用一系列小的保持行为的变换,每个变换“太小而不值得做”。然而,这些变换中的每一个的累积效应是非常显着的。通过小步骤完成它们可以降低引入错误的风险。您还可以在执行重组时避免系统损坏 - 这允许您在较长时间内逐步重构系统。 - Martin Fowler

答案 1 :(得分:4)

我试试:)在重构过程中,我必须要抵制的一个冲动实际上正在进行其他改变。假设我正在重构一些代码并在代码中看到一些不相关的东西。我必须有意识地努力不去“修复”那个。记下它并继续前进。首先,这是对手头任务的分心。它最终会污染您的更改集,因此您的提交消息现在必须记录几个看似随机的更改。

答案 2 :(得分:3)

是的,永远。我认为重构的真正本质是选择从哪个步骤开始。

我发现以安全的方式重构大变化的事情总是能够清楚地了解你想要去的地方。然后考虑您现有的系统,并尝试找出哪些部分可以引入最不可能发生根本变化的部分。然后,您可以通过受控且经过良好测试的方式介绍这些内容。

所以你要做的就是在肮脏的恶作剧中工作。并不总是直接从前面进行攻击,但有时只是小碎片。通常我都会等待,只有在几轮小小的肮脏之​​后才能获得“大奖”。但我知道我想去哪里

以这种方式工作的好处是你可以保持进步。你永远不会“停止开发进行重构”。可以说有些情况下停止是正确的情况,但大部分时间都不是。

这里的想法是,如果你“开始”兑现奖金,你将在接下来的X天里做苦差事。而且存在风险,也许你没有出鸡或无法工作 - 或者花费6个月而不是一周。如果您首先进行苦差事,那么可以以较低的风险兑现奖品。并且您的代码将随着您的进展而改进。有时您可以决定做一半的工作就足够了,因为您对问题的理解会增加。有时候你想要去哪里的想法有点拙劣,你可以在进步时重新调整你的目标。

但它很想直接获得奖励。

答案 3 :(得分:1)

我倾向于大部分时间大步重构,所以我可以从树上看到森林。这是一种“意识流”的编程方式。只要您的最后一个工作版本在您选择的源代码控制中安全...

答案 4 :(得分:0)

这就是“红色,绿色,重构”方法很有用的地方。在每个阶段,您都可以验证代码的行为是否未更改,重构只需要集成新行为。

答案 5 :(得分:0)

我使用的经验法则是使用测试进行重构,并且只重构尽可能多的代码。

在60分钟,你确定你的代码完全正是应该做的。你需要通过很多测试。我只想尝试一下,然后继续下一步。

答案 6 :(得分:0)

如果我对自己想要做的事情有一个清晰的了解,并且如果我能够轻易地确认我之后没有破坏任何东西,我会采取更大的步骤。

如果重构更复杂,我会尝试将其分解为更小的步骤,并在每个重构之后进行大量测试。

答案 7 :(得分:0)

我通常在更改代码时重构代码。也就是说,我不是在保留其功能的同时获取一段代码并重写它,而是将其重写为新功能,并且在此过程中我改进了代码的设计。

通常这意味着当我实现该功能时,我还没有对旧代码进行完整和令人满意的重构。虽然它有所改进,但我知道下次我要改变它的功能时,我将有时间进一步改进它。

对于测试,这意味着我可以同时测试重构和新功能,这可以节省一些时间。

这也意味着我只花了足够的时间进行重构,以改善该特定功能所需的维护情况。这应该有助于避免过度工程和/或浪费时间重构已经起作用并且不会从更好的设计中受益的东西。通过只关注代码我会改变,我很有可能在近期内重新访问代码,以便在用户注意力范围内进行进一步的更改。

答案 8 :(得分:0)

小的离散步骤是我最熟悉的,虽然在某些方面它可以测试我的自我控制,以统治可能是重构的血浴。如果我注意到可以进行任何改进(无论多大),我会记下它们并考虑如何将它分成单独的重构任务。另外,在提交消息中发生了一系列变化也无济于事。

NB。我工作的代码库很老了,充满了以科学家命名的神秘错误。由于大部分仍然缺乏接近50%测试覆盖率的任何东西,因此不小心被带走了。

答案 9 :(得分:0)

是的。我喜欢不断地进行测试,因此一系列微小的重构效果很好。让我的代码一次破碎超过几分钟我感到非常不舒服,而且如果我晚上回家时我的代码被破坏了,我通常会回复,第二天早上再写一次总是比试图去哪里更好我是。