异常与异常层次结构中的错误代码

2022-09-04 02:30:13

您认为可以在异常中使用错误代码来指定错误类型吗?请看一下这个代码:

public class MyException extends Exception {
    public static final String ERROR_CODE_INVALID_NAME = "";
    public static final String ERROR_CODE_INVALID_ID = "";
    ...

    private String errorCode;

    public MyException(String message, String errorCode) {
        super(message);
        this.errorCode = errorCode;
    }

    public String getErrorCode() {
        return errorCode;
    }
}

我知道在此示例中使用枚举而不是字符串更好,但我实际上担心错误代码的概念。你认为例外层次结构在这里会更好吗?我找不到任何权威来源说异常中的错误代码是反模式的。感谢。


答案 1

错误代码在以下情况下很有用

  • 您无法显示完整的错误消息(洗碗机显示)
  • 代码必须在内部处理(如果出现某个代码或服务器在客户端负责消息时向客户端发送错误代码,则会触发某些逻辑)
  • 我们有一个很棒的手册,用户可以使用代码来获得全面的信息
  • 用户不需要知道发生了什么,但必须联系供应商

所以,大多数时候,我没有看到错误代码的任何附加值。我更喜欢异常层次结构或至少清晰的错误消息,当在日志文件中找到时(甚至在程序员离开公司2年后)。

如果您对错误代码有要求 - 解决方案还不错。考虑在中央存储库(属性文件)中收集所有错误代码,以便您可以轻松交换完整的错误代码集:

myexception.ERROR_CODE_INVALID_NAME=text or number
myexception.ERROR_CODE_INVALID_ID=text or number

答案 2

根据我的经验,异常代码主要用作用户的信息消息。

我甚至没有一次看到有人试图解析一般的异常消息,以便根据错误代码做出不同的反应,通常是通过异常层次结构完成的。

另一方面,可能很难为每个特定情况创建新的异常子类,然后使用异常代码。
例如,如果对于用户代码,它没有衡量事务失败的原因,它应该以任何方式回滚它,但对于最终用户来说,为什么它发生很重要(错误的参数,数据库连接或其他)。

因此,总而言之,如果您期望以不同的方式处理不同的情况,则最好使用不同的异常类型,但如果您应该以相同的方式处理一些问题,但只通知用户特定原因,则使用异常代码更容易。