1

我有很多异常类。Fe:InvalidMethodParameterException、EntityNotFoundException 等。都有一些代码,如 xxx.yyy.zzz 和描述文字。问题是:是否有任何最佳实践和技术来组织课程及其代码/文字。目前,我正在做的是将所有代码和文字放在其他类甚至属性文件中((。在我看来,这非常令人沮丧,因为要添加一个异常,我必须对其他文件进行另一项更改,而不是一个.为了抛出异常,我使用了一个带有静态方法的类,它抛出它们。这些方法和方法不是我创建的,而是我工作的地方。所以我想提供其他更有效的方法。例如,当我提供使用只是简单地将每个异常文字和代码存储在自己的类中,他们只是忽略说它'

任何帮助,将不胜感激!

4

2 回答 2

1

我认为提高开发人员效率的系统架构将远远优于提高执行效率的系统架构,因为前者可以轻松包含后者。如果对单个模块进行更改需要您打开和修改多个模块,则该设计并没有提高开发人员的效率。我最喜欢的编程书建议异常类型由异常处理程序驱动。类似于以下内容:

Version 1:
void tryToDoSomething(bool arg) {
    try {
        doSomething(arg); //Throws MyException
    } catch (MyException e) {
        if (e.errorMessage == "Try a different argument")
            tryToDoSomething(!arg);
        else if (e.errorMessage == "Try again")
            tryToDoSomething(arg);
    }
}
Version 2:
//Split the exception so that it can be handled differently
void tryToDoSomething(bool arg) {
    try {
        doSomething(arg); //Throws InvalidArgumentException, NotReadyException
    } catch (InvalidArgumentException e) {
        tryToDoSomething(!arg);
    } catch (NotReadyException e) {
        tryToDoSomething(arg);
    }
}

除了自我记录之外,现代编译器还可以优化抛出以显着加快版本 2。这就是实际创建异常的原因,作为编译器可以理解的用户定义类型,以替换以前必须传递和手动检查的迟钝错误代码。

无论如何,如果错误代码旨在传达给用户,我认为它们不是异常而是错误,应该这样抛出。您可能会设计类似 ErrorFactory 的东西,它会接受一个字符串错误代码并抛出正确的派生类型,或者您可以直接抛出。另一方面,如果错误代码没有到达用户,为什么还要使用它们呢?

于 2012-04-12T18:00:11.257 回答
0

您可以将它们全部集中到一个类中,这会将所有内容放入一个外部类中:

public OurExceptionsClassTM {

    static final String
        ERROR1 = "123.acd.243",
        ERROR2 = "124.axd.543",
        ... ;

    public static class InvalidMethodParameterException extends Exception { ... }
    ...

    public static throwSpecialException(){ ... }
    ...

}

这解决了必须更改多个文件的问题,并且或多或少地保持您的同事习惯的方式。

您还可以使其更加模块化,例如为每个项目设置不同的外部扩展类。关键是与任何给定异常相关的所有内容仍将与该异常保持在一起。

于 2012-04-12T17:16:14.930 回答