我继承的代码库充满了error-hiding anti-pattern:
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
}
//...
}
这是一项令人生畏的努力。
有人能想出一个聪明的方法来解决这个问题吗?
答案 0 :(得分:1)
在这种情况下,可能“提取方法”http://refactoring.com/catalog/extractMethod.html会有所帮助。 当我编写代码时,我尝试区分错误和异常。通常情况下,错误!=异常。例外情况过于昂贵,只有在特殊情况下才会发生。
我会解释:
try
{
int.Parse("..")
}
catch()
{
// parsing Exception
}
VS
if(int.TryParse("..", out value)
{
// parsing Error
}