是否有任何模式可以重构复杂的代码而无需确切知道该代码的作用?

时间:2016-08-21 14:06:59

标签: refactoring

我经常发现自己很难重构我们工作中的一些遗留代码,因为它们具有很高的复杂性以及触摸代码时的所有潜在问题。要确切地知道代码的作用,需要花费大量的时间和精力,这是我通常不会有的。

所以我在想,有没有可以用于此的模式?比如,在不知道整个代码的作用的情况下重构一些东西?。

我听说过一些类似包装纸的图案,但有时它们不合适。

欢迎任何想法或最佳做法。

2 个答案:

答案 0 :(得分:1)

然而,你旋转它,更改你不完全理解的代码总是一个风险。但是,有一些系统的重构方法可以使代码中的更改风险更小,而这里我主要考虑的是重构:改进现有代码的设计,作者:Martin Fowler on Amazon

另见https://refactoring.guru,了解本书中讨论的重构目录。我强烈建议在重构时使用单元测试,并以小增量一步一步地进行,分而治之。如果您阅读本书并研究目录,即使是在杂乱,难以阅读的代码中,您也会看到小型安全重构的机会。

如果你正在寻找一种模式,这种类型问题的最佳模式可能就是Facade模式,你可以用漂亮的衣服(外立面)来装饰遗产,而你的客户代码则与外观进行通信子系统(遗产)。

答案 1 :(得分:0)

不确定。任何可证明正确的代码转换都可以说是重构。 您不必了解有关应用此类转换的代码的任何信息;通过 定义它不能破坏你的代码。

例如:

   "if (!\xx) { } else { \stmts } " ==>  "if (\x) { \stmts } "

显然是正确的,并且始终可以安全应用。

现在,是否能够可靠地应用此类转换是另一回事。如果转换是正确的,并且由机械精确的转换引擎应用(对于这样的引擎,请参见Program Transformation Systems),那么结果是正确的。通常会发生的事情是人们试图手工执行此操作......他们在管理细节方面很糟糕,经常打破代码(因此有关单元测试的建议)。

这种转变是否是改进是一个品味问题。但是,如果您相信传统的代码指标,那么减少行数,运算符数或分支的转换通常都是一种胜利。这适用于上面的示例转换。

通过使用机械引擎,人们可以构建一个正确的变换库并只应用它们。