首页 > 解决方案 > 以单独的方法处理异常以提高可读性

问题描述

在单独的方法中处理异常是一种反模式吗?

假设我有一个执行一些低级 IO 并可能抛出 IOException 的方法,并且我有一个方法 foo() 多次调用低级 IO 方法。在这样的第三种方法中进行异常处理是否有意义:

 public void foo()  throws MyCheckedException {
     // some stuff
     goDoSomeIO(path1)
    // some other stuff
     goDoSomeIO(path2)
    // some more stuff
     goDoSomeIO(path3)

  }

 private String goDoSomeIO(String filePath) throws MyCheckedException {
     try {
         doSomeIO(filePath);
     } catch (IOException ioe) {
         LOG.error("Io failed at: " + filePath);
         throw new MyCheckedException("Process failed because io failed", ioe)
     }
  }

 private String doSomeIO(String filepath) throws IOException {
        //io stuff
  }

我发现这比 doSomeIO 方法自己处理异常或异常处理发生在 foo.h 中更具可读性。

标签: javaexceptionanti-patternssoftware-quality

解决方案


我经常看到在较高级别处理较低级别方法异常的代码,无论较低级别只是一种方法还是多种方法。

这很常见,并且是由于分离的问题:低级别的东西负责推送文件,高级的东西捕捉异常以确定复杂操作是否有效。我认为将 IO 的处理和 IO 的处理放在不同的方法有什么问题。(我会试着给他们起个名字,但这解释了目的。我不是 goDoWhatever 和 doWhatever 的粉丝)


推荐阅读