当前位置:  开发笔记 > 编程语言 > 正文

如果没有处理,则抛出相同的异常,或者构造一个新的异常?

如何解决《如果没有处理,则抛出相同的异常,或者构造一个新的异常?》经验,为你挑选了1个好方法。

项目编号6的这个文章指出:

尽量不要因为价格而重新抛出异常.如果重新投掷是必须的,重新抛出相同的异常,而不是创建一个新的异常.这将带来额外的性能.您可以在每个图层中向该例外添加其他信息.

好吧,但这违反了层的分离,不是吗?

假设我有一个抛出SQLException的DAO的特定实现

假设我的服务层(或业务层......)从DAO层调用方法,但决定不处理抛出的异常.

如果我将SQLException重新抛出到视图层,我的视图层将不仅会耦合到DAO层,不是吗?

是不是正确抛出一个新的异常,使查看依赖只有下面一层一层,而不是两个?

抛出相同的Exception会带来什么优势,除了性能?



1> dasblinkenli..:

如果我重新抛出SQLException视图层,我的视图层将不仅会耦合到DAO层,不是吗?

这绝对是正确的.

抛出一个新的异常是不对的,所以View只依赖于下面的第一层,而不是两个?

绝对.如果您的DAO层无法处理来自SQL的异常,它应该捕获它,尽可能多地了解它,并抛出它自己的异常.

考虑一个例子:假设您的DAO层允许您添加某个属性必须唯一的新项目.SQL层可能具有唯一约束或唯一索引,以在RDBMS层上强制实施此约束.如果DAO层的调用者尝试保存违反唯一性约束的对象,则会抛出SQL异常.如果你让这个异常传播给调用者,他们可能不知道如何处理它,甚至可能会向最终用户显示:

ORA-00001:违反了唯一约束(UxPatient_rec_soc)

这个解决方案非常糟糕,但尝试在客户端上理解它的替代方案更加脆弱.

您的DAO应该捕获异常,确定它对调用者意味着什么,并抛出自己的异常.这样,您就可以独立于调用者更改您的实现.

一般说明:在决定抛出/重新抛出异常时,性能考虑应该是最不重要的因素,因为异常应该仅在罕见的异常情况下抛出.清晰的界面更为重要.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有