java中的异常冒泡模式

时间:2015-07-06 11:15:17

标签: java design-patterns error-handling exception-handling

假设我的应用程序代码是结构层。

例如
第一层是客户服务层 第二是验证层 第三是自定义业务逻辑层。 Forth是核心业务逻辑层 第五是ORM层。

我们希望在应用程序代码的任何点/级别,如果我们看到用户提出的请求无法供应(可能是由于缺少所需的数据或任何其他应用程序逻辑约束)而且我们想抛出错误除顶层外,不会被任何其他图层捕获,因此错误消息可以正确地显示给用户。

为了达到这个目的,我想创建一个扩展Error的新类。 因此它保持未选中状态,可以跳过任何捕获异常的try catch block

这看起来是一个好策略,是否有一个bttern模式,因为我的解决方案违背了javadoc?

Javadoc解释得很好:

  

错误是Throwable的子类,表示严重问题   一个合理的应用程序不应该试图抓住。最多的   错误是异常情况。

enter image description here

3 个答案:

答案 0 :(得分:2)

不,这是一个糟糕的策略。一般来说,你几乎不应该延伸Error。扩展Exception(对于已检查的例外)或RuntimeException(对于未经检查的例外)。从较低级别抛出异常以绕过中间try-catch块的想法也非常糟糕。中间的try-catch块是设计的,用于捕获并可能重新抛出包含在更多面向业务的异常对象中的异常。如果您对中间层中的逻辑不满意,那么改变逻辑,不要试图破解它。

答案 1 :(得分:0)

您可以在较低层中声明方法以抛出异常而不是捕获它们:

public businessLayerFoo() throws Exception {
   ...
}

Error通常用于表示执行期间发生的严重问题。

答案 2 :(得分:0)

如果你真的不想让你的所有方法抛出相同的基本异常,你可以使你的异常扩展RuntimeException它不会被检查。

你永远不应该捕捉错误。 除非您希望程序立即停止并发出紧急消息,否则不应扩展错误。