Check Exception or Uncheck Exception

来源:互联网 发布:杨健伟 蓝凌软件 编辑:程序博客网 时间:2024/05/19 03:41

Check Exception or Uncheck Exception

最近遇到Spring MVC的系统中有各种乱七八糟的异常,领导说重构下,统一的异常处理、支持国际化。

系统现状:

1. 系统中的异常一般有一个统一处理异常的AOP,但是没有严格的错误码,抛异常文案都是直接裸露在业务代码中

2. 系统抛的异常大多没有业务含义,NP也没有处理,大多都是直接的java代码级别的异常


明确问题后,大概要做以下的事情

1. 包含严格的错误码、清晰的文案(国际化问题只有多一些语种的文案)

2. 定义好业务异常

第一个问题很好搞,第二个问题在搞的过程中面临一个选择, java中的异常包含两种: Check Exception or UnCheck Exception.

UnCheck Exception是运行时的异常,Check Exception 是明确的异常。到底我们的业务异常用哪一种异常呢?或者都用?

(1) 假设用Check Exception

这样的好处就是接口暴露出来异常的类型,调用者会很明确知道需要处理哪些异常

坏处就是: 代码丑丑丑丑丑丑、每个接口定义后面都跟了一堆的异常。

(2) 假设用 Uncheck Exception

这样的好处就是接口简洁、确定就是上层根本不知道接口会抛出什么异常、业务逻辑要怎么处理这些异常?完全懵逼

(3) 混合用

好处不说了 双方的优点,坏处就是系统复杂,很多时候 写代码的都不知道哪些要定义成check或者uncheck Exception


我的经验是如果是Spring mvc这种会有一个统一处理异常的出口的系统,多用Uncheck Exception,少用Check Exception。除非特别的情况,需要非常明确上层系统要处理的。

说说我们系统改造的结果,由于我们系统Restful风格的接口, 异常的类型抽象出以下几大类

public class BusiException extends RuntimeException{}

以下的异常都 extends BusiException

ForbiddenException

InternalServiceErrorException

InvalidParameterException

ResourceConflictException

ResourceNotFoundException

UnauthorizedException

基本上跟集中http code一致。



待续-----------------------





0 0
原创粉丝点击