赞
踩
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
- {
- }
ForbiddenException
InternalServiceErrorException
InvalidParameterException
ResourceConflictException
ResourceNotFoundException
UnauthorizedException
基本上跟集中http code一致。
待续-----------------------
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。