假设我的应用程序代码是结构层。
例如
第一层是客户服务层
第二是验证层
第三是自定义业务逻辑层。
Forth是核心业务逻辑层
第五是ORM层。
我们希望在应用程序代码的任何点/级别,如果我们看到用户提出的请求无法供应(可能是由于缺少所需的数据或任何其他应用程序逻辑约束)而且我们想抛出错误除顶层外,不会被任何其他图层捕获,因此错误消息可以正确地显示给用户。
为了达到这个目的,我想创建一个扩展Error
的新类。
因此它保持未选中状态,可以跳过任何捕获异常的try catch block
。
这看起来是一个好策略,是否有一个bttern模式,因为我的解决方案违背了javadoc?
Javadoc解释得很好:
错误是Throwable的子类,表示严重问题 一个合理的应用程序不应该试图抓住。最多的 错误是异常情况。
答案 0 :(得分:2)
不,这是一个糟糕的策略。一般来说,你几乎不应该延伸Error
。扩展Exception
(对于已检查的例外)或RuntimeException
(对于未经检查的例外)。从较低级别抛出异常以绕过中间try-catch块的想法也非常糟糕。中间的try-catch块是设计的,用于捕获并可能重新抛出包含在更多面向业务的异常对象中的异常。如果您对中间层中的逻辑不满意,那么改变逻辑,不要试图破解它。
答案 1 :(得分:0)
您可以在较低层中声明方法以抛出异常而不是捕获它们:
public businessLayerFoo() throws Exception {
...
}
Error
通常用于表示执行期间发生的严重问题。
答案 2 :(得分:0)
如果你真的不想让你的所有方法抛出相同的基本异常,你可以使你的异常扩展RuntimeException它不会被检查。
你永远不应该捕捉错误。 除非您希望程序立即停止并发出紧急消息,否则不应扩展错误。