java - ErrorHandler 用于在一个地方解决多个异常?

标签 java exception design-patterns

我有一个 ServiceExecutor 并运行一个很长的例程(网络服务调用、数据库更新、用户更新等)。由于这些例程可能会导致多个错误,因此我希望在一个位置捕获大量错误。因此我用trycatch包裹它。但每个异常都应该获得自定义错误处理,因此将有 5-10 行代码来解决错误。

问题:我的 runLongRoutine() 变得太大,所以我必须以某种方式将错误处理排除在外。但我不想重新抛出这些异常,因为任何使用 runLongRoutine() 的类都不应该关心错误,甚至不应该知道可能会发生错误。

我如何调整这里的错误处理?有我可以选择的设计模式吗?

class ServiceExecutor {
    void runLongRoutine() {
        try {
            several(param1);
            calls();
            to(param2);
            different(param3, param1);
            methods();
        } catch (CustomException e) {
            //5-10 lines of code
        } catch (IOException e) {
            //5-10 lines of code
        } catch (NetworkException e) {
            //5-10 lines of code
        }
        //to be continued
    }
}

最佳答案

您可以轻松地将异常处理(针对每种类型的异常)和/或实际代码分解为单独的私有(private)方法,例如

class ServiceExecutor {
    void runLongRoutine() {
        try {
            runLongRoutine0();
        } catch (CustomException e) {
            //5-10 lines of code
        } catch (IOException e) {
            //5-10 lines of code
        } catch (NetworkException e) {
            //5-10 lines of code
        }
        //to be continued
    }

    private void runLongRoutine0() throws CustomException, IOException, NetworkException {
        several(param1);
        calls();
        to(param2);
        different(param3, param1);
        methods();
    }
}

class ServiceExecutor {
    void runLongRoutine() {
        try {
            several(param1);
            calls();
            to(param2);
            different(param3, param1);
            methods();
        } catch (CustomException e) {
            handleCustomException(e);
        } catch (IOException e) {
            handleIOException(e);
        } catch (NetworkException e) {
            handleNetworkException(e);
        }
        //to be continued
    }

    private void handleCustomException(CustomException e) { ... }
    private void handleIOException(IOException e) { ... }
    private void handleNetworkException(NetworkException e) { ... }
}

如果确实有必要,甚至可以结合使用两种方法。

关于java - ErrorHandler 用于在一个地方解决多个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22249573/

相关文章:

jquery - "The state information is invalid for this page and might be corrupted"

c# - 如何正确使用try-catch语句

javascript - 为什么 Node.js 中的事件不使用常量?

c# - 哪种设计模式适合您? ASP.NET 与 MySQL

java - 当我们使用 Bitmap 时内存不足

java - 在 switch-case 语句中使用枚举的序数值

javascript - 如何使用 Redux 时间旅行来处理错误

java - Java 语言规范第 4 版何时可用?

java - 通过不同的线程访问变量和 Swing 组件

c# - 数据访问层的设计模式