我认为提高开发人员效率的系统架构将远远优于提高执行效率的系统架构,因为前者可以轻松包含后者。如果对单个模块进行更改需要您打开和修改多个模块,则该设计并没有提高开发人员的效率。我最喜欢的编程书建议异常类型由异常处理程序驱动。类似于以下内容:
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 的东西,它会接受一个字符串错误代码并抛出正确的派生类型,或者您可以直接抛出。另一方面,如果错误代码没有到达用户,为什么还要使用它们呢?