java 中的异常冒泡模式
exception bubbling pattern in java
假设我的应用程序代码是结构层。
例如
第一层是客户端服务层。
其次是验证层
第三是自定义业务逻辑层。
第四是核心业务逻辑层。
第五是ORM层。
如果我们发现无法提供用户发出的请求(可能是由于缺少所需数据或任何其他应用程序逻辑限制),我们希望在任何 point/level 应用程序代码中,我们希望抛出除顶层之外的任何其他层都不应捕获的错误,以便可以将错误消息正确显示给用户。
为了实现这一点,我正在考虑创建一个扩展 Error
的新 class。
这样它就不会被选中,并且可以跳过任何捕获异常的try catch block
。
这看起来是个好策略吗,是否有一个 bttern 模式,因为我的解决方案与 javadoc 不符?
Javadoc 解释得很好:
An Error is a subclass of Throwable that indicates serious problems
that a reasonable application should not try to catch. Most such
errors are abnormal conditions.
您可以在较低层声明方法抛出异常而不是捕获它们:
public businessLayerFoo() throws Exception {
...
}
Error
通常表示执行过程中出现严重问题。
不,这是个糟糕的策略。一般来说,你几乎不应该扩展 Error
。扩展 Exception
(对于已检查的异常)或 RuntimeException
(对于未检查的异常)。从较低级别抛出异常以绕过中间 try-catch 块的想法也很糟糕。中间 try-catch 块 设计 用于捕获并可能重新抛出将它们包装在更面向业务的异常对象中的异常。如果你对中间层的逻辑不满意,那就改变那个逻辑,不要试图破解它。
如果你真的不想让你的所有方法都抛出相同的基础异常,你可以让你的异常扩展 RuntimeException 它不会被检查。
你永远不应该捕获错误。
除非您希望您的程序立即停止并出现紧急消息,否则您永远不应该扩展 Error。
假设我的应用程序代码是结构层。
例如
第一层是客户端服务层。
其次是验证层
第三是自定义业务逻辑层。
第四是核心业务逻辑层。
第五是ORM层。
如果我们发现无法提供用户发出的请求(可能是由于缺少所需数据或任何其他应用程序逻辑限制),我们希望在任何 point/level 应用程序代码中,我们希望抛出除顶层之外的任何其他层都不应捕获的错误,以便可以将错误消息正确显示给用户。
为了实现这一点,我正在考虑创建一个扩展 Error
的新 class。
这样它就不会被选中,并且可以跳过任何捕获异常的try catch block
。
这看起来是个好策略吗,是否有一个 bttern 模式,因为我的解决方案与 javadoc 不符?
Javadoc 解释得很好:
An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal conditions.
您可以在较低层声明方法抛出异常而不是捕获它们:
public businessLayerFoo() throws Exception {
...
}
Error
通常表示执行过程中出现严重问题。
不,这是个糟糕的策略。一般来说,你几乎不应该扩展 Error
。扩展 Exception
(对于已检查的异常)或 RuntimeException
(对于未检查的异常)。从较低级别抛出异常以绕过中间 try-catch 块的想法也很糟糕。中间 try-catch 块 设计 用于捕获并可能重新抛出将它们包装在更面向业务的异常对象中的异常。如果你对中间层的逻辑不满意,那就改变那个逻辑,不要试图破解它。
如果你真的不想让你的所有方法都抛出相同的基础异常,你可以让你的异常扩展 RuntimeException 它不会被检查。
你永远不应该捕获错误。 除非您希望您的程序立即停止并出现紧急消息,否则您永远不应该扩展 Error。