记得上学的时候学习英语,每个英语老师说到英语翻译的时候都会说英语翻译要做到“信、达、雅”。如今做了一名程序员竟然体会我还是想用这三种境界来要求自己,恰逢自己现在所做之项目偏业务,代码的优雅显得格外重要。所以我就想写点这方面的东西,今天就先来说说如何优雅的抛出业务异常。代码千千万,只希望对自己和对大家有所帮助。
针对java开发者而言,异常的重要性不言而喻,这里也不再赘述。今天主要说说在业务中利用异常处理机制来实现业务异常的优雅提示。
首先,我们定义一个异常编码接口
1 public interface IErrorCode { 2 public String value(); 3 }
重点来了,我们去实现这个接口
1 import java.util.EnumMap; 2 3 import com.test.IErrorCode; 4 5 public enum MyBusinessErrorCode implements IErrorCode { 6 7 /** 8 * 角色不存在或已被删除 9 */ 10 ERR_MODEL_001, 11 /** 12 * 角色编码已存在 13 */ 14 ERR_MODEL_002; 15 16 private static EnumMap<MyBusinessErrorCode, String> errorCodeMap = new EnumMap<MyBusinessErrorCode, String>( 17 MyBusinessErrorCode.class); 18 19 static { 20 errorCodeMap.put(ERR_MODEL_001, "角色不存在!"); 21 errorCodeMap.put(ERR_MODEL_002, "角色编码已存在!"); 22 } 23 24 public String value() { 25 return errorCodeMap.get(this); 26 } 27 }
下面我们来说说这段代码好在哪里,
- 统一定义异常提示,易于维护,易于国际化配置化。
- 采用枚举Map运行效率更高。
- 代码逻辑清晰,更容易上手,更容易统一风格。
那么如何在代码中去使用呢?
首先,创建一个创建异常的工具类
1 public class ExceptionUtil { 2 3 /** 4 * 获取业务异常类 5 */ 6 public static BusinessException CreateBusinessException( 7 IErrorCode code) { 8 return new BusinessException(code); 9 } 10 11 /** 12 * 获取带数据格式化的业务异常类 13 * 14 * @param code 15 */ 16 public static BusinessException CreateFormatedBusinessException(BusinessErrorCode code, Object ... object){ 17 String str = code.value(); 18 str = String.format(str, object); 19 return new BusinessException(code.name(), str, ""); 20 } 21 22 }
在对应的业务方法捕获并处理异常
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date; try { // 申请时间 date = sdf.parse(form.getApplyDateView()); } catch (ParseException e) { throw ExceptionUtil.CreateBusinessException(MyBusinessErrorCode.ERR_RBM_005); }
至此,业务异常就得到了优雅的处理。