JAVA业务系统异常抛出的总结
JAVA 做web开发的过程中,什么时候该抛出异常,什么时候不该抛出异常,我想大家都有自己的想法和意见,下面是我的总结,欢迎大家批评指正。
第一种场景:
如果你的系统需要展现一个列表,并且列表中包含了统计数据列。
如下图所示:
网站ID | 网站名称 | URL | 月展现PV |
123 | 服装 | ...... | 500万 |
其中:
网站ID,网站名称,URL 这3列数据数据网站基本信息,他们是来自一张网站信息表的。
月展现PV 是网站的扩展信息,他来自一张网站PV日志报表的。
这两张表不在一个数据库里面,所以无法进行关联查询。
所以为了展现整个列表的目的,一种方法是我们需要执行两次查询,然后把两次查询的结果合并在一个结果集里面进行返回,最后前端的页面再进行展现。
那么如果我们采用两次查询,再组装成一个结果集来返回的话,那么问题就出现了:
1、如果在第一次查询网站的基本信息表时,服务失败了,那么我们是应该抛出异常提示用户系统出现异常同时展现一个空的列表给用户呢,还是说不给出提示用户‘系统异常’ 的信息,而是直接给用户一个空的列表。
2、如果第二次查询网站的扩展报表数据时,服务失败了,那么我们是应该抛出异常,显示空的列表,并且给出提示呢,还是说列表中的其他列正常的显示出来,只是空出 ‘月展现PV’ 列,应为查询月展现PV的服务出现了异常,但是异常没有被抛出,只是空了此列。
方案:
1、如果你的系统是像银行这些实时要求比较高的系统,那么无论出现上面问题的任何一个问题,都应该抛出异常,并且在页面是提示用户你的系统出现了故障,并且显示一个空的列表给客户。
2、如果你的系统用户的要求不是很严格,那么第一次查询基本信息失败时最好也是抛出异常,给出提示。
3、在系统用户要求不严格的情况下,但是如果是第二次查询出了问题,那么你可以选择只展现第一次查询的基本信息列,而空去出错的列,然后给出用户一些提示,或者不给。而不是抛出异常导致整个列表都不能正常的现实出来。
总之在查询操作时,你可以选择性的抛出异常。
JAVA异常的抛出和捕获处理需要系统付出很大的代价,所以根据的你的情况选择性的抛出异常,不要抛出不必要的异常。第二次的查询失败就是可以不抛出异常的情况。
第二中场景:
在做更新操作时,因为涉及到事务以及数据的回滚,而我们目前流行的JAVA构建回滚事务的前提就是以异常为判断的,所以为了保证事务的有效性,我们最好的我们的代码中你遇到失败问题是就抛出异常,一次保证事务性。