我继承的代码库充满了错误隐藏的反模式:
public void foo() {
try {
//Entire body of method, sometimes only 5 lines but often 500+
} catch (Exception e) {
Logger.LogToFile(e.msg);
}
}
这种模式的实例数量在数百个数量级。
我的方法是完全删除 try..catch 块,因为我们已经在顶层有一个异常处理程序。这是不受欢迎的,因为我觉得我正在改变行为。(更多的例外会冒出来)。
理想情况下,我会遍历 10-500 行的 100 个实例中的每一个,并找出可能引发的异常。然后我只会在更紧密的块中压缩这些异常:
public void foo() {
//...
try {
// ~1-5 lines
} catch (ArgumentInvalidException e) {
Logger.LogToFile(e.ToString());
//TODO handle
}
//...
try {
// ~1-5 lines
} catch (UnitConversionException e) {
Logger.LogToFile(e.ToString());
//TODO handle
}
//...
}
这是一个令人生畏的努力。
谁能想到一个聪明的方法来解决这个问题?