3

我继承的代码库充满了错误隐藏的反模式

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
  }
  //...
}

这是一个令人生畏的努力。

谁能想到一个聪明的方法来解决这个问题?

相关 -删除过多的 try-catch 块

4

1 回答 1

1

也许“提取方法” http://refactoring.com/catalog/extractMethod.html在这种情况下会有所帮助。当我编写代码时,我会尝试区分错误和异常。错误!=常见情况下的异常。异常代价太大,只应在异常情况下发生。

我会解释:

try
{
    int.Parse("..")
}
catch()
{
    // parsing Exception
}

对比

if(int.TryParse("..", out value)
{
    // parsing Error
}
于 2013-07-13T18:35:18.507 回答