java - 为了提高可读性,在单独的方法中进行异常处理

标签 java exception anti-patterns software-quality

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

假设我有一个执行一些低级 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 中更具可读性。

最佳答案

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

这很常见,并且是由于分离的关注点造成的:低级别的东西负责推送文件,高级的东西捕获异常以确定复杂的操作是否有效。我不认为把IO的处理和IO的处理放在不同的方法里有什么问题。 (我会尝试给他们一些名字,但这可以解释其目的。我不喜欢 goDoWhatever 和 doWhatever)

关于java - 为了提高可读性,在单独的方法中进行异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55380871/

相关文章:

java - Java中从父列表调用子方法

变量中的 Python 正则表达式

c# - 如何在多线程中从TargetInitationException中优雅地恢复?

java - 我处于反模式中,我想离开

anti-patterns - 馄饨代码 - 为什么是反模式?

java - 正则表达式帮助在字符串中搜索匹配项

java - hql 查询获取以父表 id 作为键、以子对象列表作为值的映射

java - 如何在 Jtable 中添加序列号(S.No.),每次删除表的数据时该序列号都会更新?

c# - 捕获 block 选择

c# - 它是反模式吗?