fea*_*net 9 language-agnostic oop refactoring
由于非常晚的主要需求变化,目前正在对应用程序进行相当重要的重构.
我总是觉得,当我做这种事情时,我并没有以非常自律的方式接近它.我的应用程序很可能会在一个状态下每天/几周,它不会构建或需要注释掉大量的代码才能使其编译.
我不喜欢在这种状态下检查源代码控制,所以如果我犯了大错,我常常觉得我没有退缩.我现在正在摧毁我的应用程序,而且我正在控制着100个不同的主题.就像其中一个人,你读到的是出于好奇而将他们的汽车引擎分开的人,然后意识到他们不知道如何将它们全部重新组合在一起.
是否有任何好的资源可以讨论如何以更加渐进和破坏性更小的方式进行重构?有人可以提供任何建议吗?或者每个人都觉得这样吗?
Pét*_*rök 18
你所描述的实际上不是重构.
重构是一项训练有素的工作,可以在不改变其功能的情况下改进代码设计,以小 - 甚至简单 - 步骤完成,由单元测试保护,确保系统在每个步骤后都能正常运行.而且,它通常在较长的时间段内以较小的增量进行,而不是在一次大的嗖嗖声中进行.
这不是过于热心,只是为了澄清条款:-)当我们以相同的方式理解相同的词时,误解和沟通问题的可能性较小.
当然,如果你有时间一次做很多重构,那就更好了!但是在你开始这样的努力之前,你绝对需要建立一套好的单元测试,它们涵盖 - 理想情况下 - 你要改变的代码部分中的所有功能.
既然您正在讨论"重大需求变更",那么您所谓的"重构"实际上是实际实现新功能还是仅改进设计以准备引入新功能尚不清楚.我强烈建议将这两个阶段分开:首先重构而不改变现有功能,使您的设计对正确位置的扩展更加开放,这样您就可以更轻松地合并所需的功能更改.
由@Eric链接的重构书是基础; 我会在Josh Kerievsky中添加Refactoring to Patterns,这是关于重构的实际应用.
Eri*_*tin 11
你需要一个好的单元套件,以确保你不会破坏已经工作的东西.Martin Fowler还有一本关于这个主题的好书:重构:改进现有代码的设计
我还建议抽象出你想要重构的代码部分,并且仍然为其他人提供旧的实现,同时你可以访问你正在编写的新代码,这样你仍然可以从源代码控制中受益.
使用分布式源代码控制系统还可以让您在不中断其他工作的情况下提交.
我正在解决类似的问题,这就是我所做的......
关键是要使每个重构步骤尽可能小并经常进行测试/提交.