结论
面向对象语言java,多使用异常机制。//所有非正常业务流程,就都是异常,虽然不一定真的是错误,比如登陆密码错误。
面向过程语言C,才用状态码判断。//状态码的缺点是,要搞一大堆的判断状态的代码,影响正常业务逻辑的观感。
null
如果是查询类的接口,找到数据,可以返回null。//缺点:客户端需要校验空指针,搞得代码很冗余,但是这个不可避免。 其他,最好就是抛出异常。
多使用异常机制的优点
1.不需要校验各种状态
2.而且异常信息方便排查错误
状态码字段
描述信息
异常调用栈
3.可以多自定义业务异常
然后使用异常机制,而不是使用状态码,然后各种校验。
对外接口
使用结果对象,比如微信 支付宝的支付接口,都是结果对象。
阿里规范
3.在代码中使用“抛异常”还是“返回错误码”?
对于公司外的 http/api 开放接口必须 使用“错误码”;而应用内部推荐异常抛出;跨应用间 RPC 调用优先考虑使用 Result 方式,封 装 isSuccess(通信状态)、“错误码”(业务状态)、“错误简短信息”。
总结
1.对公司外 //肯定是结果对象,不可能把异常抛给人家
2.公司内-应用内 //抛出异常
3.公司内-跨应用 //最好是状态码
developer.aliyun.com/article/720…
分层
1、dao层
dao层,不捕获异常,也不校验各种状态,只抛出异常。
因为dao层的代码都比较短小,也没有各种业务异常状态,都是系统本身的异常。
而且dao层可能要切换dao层框架,导致不好切换。
2、service
通常要处理各种业务逻辑状态,并且捕获各种异常。
3、控制器
捕获异常;
并且,封装结果对象,返回结果对象给前端,前端js校验各种状态(成功,失败)。
参考
www.iteye.com/topic/2038?… //iteye robbin