0%

自定义异常的分类

一般一个项目都会有一套自己的异常框架。异常框架做好了,系统的健壮性,安全性都有保证,而且代码也会整洁可读性高。本文就介绍下我对异常框架设计的一些思考。

一种是可以把异常设计的很细,比如说对于User的操作,就可以定义出NoSuchUserException来表示用户不存在、UserExistsException表示用户已存在,甚至还会有DuplicateUserNameException表示用户名重复。这只是对于一个User对象的操作,如果对于每个对象操作都这么定义,那就太多了。这种异常确实能从名字上就能知道其含义,但是使用起来太麻烦了。如果说有一个代码生成器,对于每张表都能自动的生成这些对应的异常,到也可以用用。

还有一种设计是按层定义异常,可以分为三个。一个是DaoException来封装所有持久层的异常,一个是ServiceException来封装所有服务层异常,再有一个AppException来封装应用层的异常。使用的时候会在服务层把DaoException转化为ServiceException,再在应用层把ServiceException封装成AppException。最外层有一个拦截全局异常,拦截AppException就可以了。

还可以把异常分为这么几类,一类是参数格式异常ArgumentException;一类是业务校验异常BusinessException;再一个是ServiceException,来定义服务异常。ArgumentException在所有的参数格式校验出错的时候使用;BusinessException在业务校验出错的时候使用,比如在校验用户名重复的时候可以使用此异常;ServiceException处理业务逻辑代码的时候出错时使用。

还有一种是只使用一个AppException,在这个异常类中添加一个type属性,通过type来区分不同的异常。type可以用一个枚举来维护,这个type值可以是上面提到的参数格式业务校验服务。也可以只用一个AppException,所有的异常都封装成这个,不再按type细分。

总之,异常框架弄好了,无论是开发的时候定位错误位置,代码的整洁,到显示给用户时的错误提示,都会很方便,准确。