你小步骤重构吗?
在阅读了福勒的“重构”一段时间后,我经常想到“我应该在更小的步骤中完成”。 - 即使我没有破坏我的代码。你小步骤重构吗?
以小步骤重构是安全的,但花费时间。这是速度和风险之间的折衷 - 我试图在选择重构方式时采取策略性的策略。
尽管如此:大部分时间我都在做更大步骤的重构。如果我带了一些福勒的“机械学”部分,并比较我的工作方式,我可能会发现我经常跳跃两到五步。这并不意味着我是重构专家。我的代码可能会中断5到60分钟或不可编译。
您是否以较小的步骤重构并尝试在更短的频率上生成完整的代码?而且:你是否成功做到这一点?
Martin Fowler似乎倾向于小而渐进的重构方法。但是,在阅读他的书后,他偶尔会做出一些激烈的步骤,但是只有用单元测试来备份代码。
重构是一种用于改进现有代码库设计的受控技术。其实质是应用一系列小的行为保留转换,其中每一个“太小而不值得做”。然而,每个转换的累积效应都非常显着。通过小步骤完成它们,可以降低引入错误的风险。您还可以避免在进行重组时系统崩溃 - 这可让您在较长时间内逐渐重构系统。 - Martin Fowler
我倾向于在大部分时间大步重构,所以我可以从树上看到森林。这是一种“意识流”式的编程。只要你有你的上一个工作版本安全的选择你的源代码控制...
这就是“红色,绿色,重构”方法有用的地方。在每个阶段,您都有能力验证代码的行为是否保持不变,重构只需要整合新行为。
我尝试:)我必须抵制最重要的一个冲动,而重构实际上正在进行其他变化。假设我正在重构一些代码并查看代码中不相关的内容。我必须有意识地努力不要去“修复”这一点。记下它并继续。首先,这是对当前任务的分心。它也最终会污染你的变更集,所以你的提交信息现在必须记录几个看似随机的变化。
我使用的经验法则是重构测试,只重构尽可能多的代码,因为您也有自信。
在60分钟,你确定你的代码正在做它应该做的。你需要很多测试才能通过。我只想尝试一下,然后继续下一步。
如果我对自己想要做的事情有清晰的了解,并且如果我可以轻松确认事后我没有发现任何问题,我正在采取更大步骤。
如果重构更复杂,我会尝试将其分解成更小的步骤,并在每个重试之后进行严重测试。
是的,总是。我认为重构的真正本质是选择从哪一步开始。
我发现,以安全的方式重构大的变化的东西总是要有一个合理清晰的图像,你想要去哪里。然后考虑你现有的系统,并试图找出你可以引入哪些最不可能是激进变化的作品。然后,您可以以受控和经过严格测试的方式介绍这些内容。
所以你要做的就是在工作的恶劣。并不总是直接从前面攻击,但有时只是凿掉小块。通常我会等待,并且在经过几次小小的混乱之后才去争取“大奖”。但我知道其中我想去。
以这种方式工作的好处是您可以保持进步。你永远不会“停止开发来重构”。可以说有些情况下,停止是正确的情况,但大多数情况下并非如此。
这里的想法是,如果你在奖金兑现时“开始”,你将花费接下来的X天来做苦差事。而且存在风险,也许你会出门或者不工作 - 或者花费6个月而不是一个星期。如果你先做苦工,那么兑现奖品的风险就会降低。你的代码会随着你的进步而改善。有时你可以决定做一半的工作就够了,因为你对问题的理解会增加。有时候你想要去哪里的想法有些拙劣,你可以在你进步的时候重新调整你的目标。
但其诱人的直接奖励。
我通常会在更改代码时重构代码。也就是说,我不是在维护其功能的同时重写代码并重写它,而是将其重写为新功能,并在此过程中改进代码的设计。
通常这意味着在我没有对旧代码进行完整和令人满意的重构之后,我实现了该功能。虽然它有所改进,但我知道在下一次我要改变它的功能时,我会有时间进一步改进它。
对于测试,这意味着我可以同时测试重构和新功能,这应该可以节省一些时间。
这也意味着我只花费足够的时间进行重构,以改善该特定功能所需的维护情况。这应该有助于避免过度工程和/或浪费时间重构已经工作的东西,并且不会从更好的设计中受益。通过只关注代码,无论如何我都会改变,我很有可能会在近期再次访问这些代码,以便在用户注意力范围内做进一步的修改。
小不连续的步骤是什么,我最舒服的,虽然在某些点上也可以是我的自我控制,这可能是一个重构血浴统治的考验。如果我注意到可以做出任何改进(无论大小如何),我会记下它们并考虑如何将它分解成单独的重构任务。另外,在提交消息中有一个改变的传奇并没有帮助。
注意:我所使用的代码基础相当古老,充满了以科学家命名的那些神秘错误。即使有50%的测试覆盖率,大部分仍然缺少任何东西,这会让人不知所措。
没错。我喜欢不断地进行测试,因此一连串的小型重构工作得很好。我的代码一次破解超过了几分钟,我感到非常不舒服,而且如果我晚上回家时我的代码被破坏,第二天早上重新写入,我总是会回复它总是比尝试提取更好我曾是。
这应该是一个wiki。 – 2009-01-17 20:49:42
@ocdecio不明白为什么这应该是维基。这不是投票 – krosenvold 2009-01-17 21:04:26