Sti*_*nky 5 java exception-handling
我继承了一个java应用程序,它处理请求并在确定应该取消请求时抛出异常.对于以前的开发人员来说,例外是很方便的,因为它们是退出不再适用的逻辑树的简单方法(是一个goto),并且它会向日志打印堆栈跟踪,这是一个很好的信息.似乎是论坛和博客上的共识,不应将异常用于流量控制,并且超过一半的处理请求被取消,因此它们绝对不是例外情况.一个参数是性能,它不适用,因为我们的异常代码运行速度足够多年.另一个论点是,它的结果尚不清楚,我同意这一点.我的问题是:替代方案是什么.我唯一能想到的是,如果处理应该继续,则每个方法都返回true,否则返回false.这似乎会使我的代码变得非常膨胀:
checkSomething();
checkSomethingElse();
Run Code Online (Sandbox Code Playgroud)
进入这个:
boolean continueProcessing = false;
continueProcessing = checkSomething();
if (!continueProcessing) {
return false;
}
continueProcessing = checkSomethingElse();
if (!continueProcessing) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
那么如果该方法应该返回什么呢?任何指导都会很棒.我真的很想观察可用的"最佳实践".
更新:
我可能应该首先提到的另一个问题是,请求在超过50%的时间内被取消,并不意味着某些事情没有正确,这意味着毕竟不需要请求.
在您的方案中,替代方法是抛出异常并返回结果.
哪个最好(哪个是"最佳实践")取决于"检查......"方法的失败是否应归类为正常或异常.在某种程度上,这是你必须做出的判断.在打电话时,有几点需要注意:
与测试布尔结果相比,创建+抛出+捕获异常大约是SLOWER的3个数量级.
返回状态代码的一个大问题是很容易忘记测试它们.
总之,最佳做法是不使用异常来实现正常的流量控制,但是由您来决定正常和异常之间的边界线.
在没有看到真实的代码/上下文的情况下,我的直觉是这可能是使用异常的合适位置.
| 归档时间: |
|
| 查看次数: |
4157 次 |
| 最近记录: |