实际上,我在职业生涯中经历了三次重大的重构。代码有衰减的趋势,因此,如果您的代码库足够长,那么就不可避免地需要进行大量重构。我所有的示例都基于私有代码,这可以解释为什么很难找到公共示例。
第一次,是一个相信或不相信的应用程序,其基本架构使其只能与点矩阵打印机一起使用。当我的公司找不到供应商来供应色带时,他们指派我让它与激光打印机一起使用。
第二次是将数百个自动化测试脚本从C迁移到Java,部分原因是我们需要更好的跨平台功能,另一方面是因为雇用新的C开发人员变得越来越困难。
我第三次仍在中间,这是将一个庞大的单片应用程序模块化,从而通过减少耦合以及跨平台的目的来进行单元测试。
我把努力比作爬山。您面前有这个宏伟的目标,但您不能在宏观层面上解决它。您一次握住一个手柄,始终处于关闭的后备位置,直到下一个安全装置到位之前,才可以断开前一个安全装置的连接。您开始只是进行一些小小的增量改进,然后转了一会儿,突然看到了美丽的景色。
举例来说,假设您有60,000个高度耦合的代码文件。您想开始将其置于单元测试下,但是依赖项使其无法实现。您如何解决?您解耦一个文件。您添加自动测试。在继续前进之前,您需要回到稳定的地面。重复59,999次。
如果听起来很简单,那是因为它很简单。这并不容易,但是很简单。起初很难注意到任何进展。我们距离似乎不可能进行的重构已经两年了,可能要等到我们完成之前还有很多年,但是回首过去,我们突然意识到代码已经变得更好了,并且我们能够继续提供新功能同时给我们的客户。
其他两次以相同的方式工作。您找到了可以采取的最小安全步骤,并且采取了这一步骤,始终将应用程序保持在工作状态。您只需要担心全局,以确保您朝着正确的方向前进。您的所有操作都是小规模,稳定且递增的。