对切面进行异常处理的理解

切面对于同一处理异常有很大的便利性,经常在项目中用到。

在系统开发中,切面应用于两层,一个是对外提供的Facade的层,一个是访问外部的rpc层,对这两层的处理都有都有异常捕获流程。

facade由于是对外提供的接口,一般该接口会返回code值以及结果对象,调用方会根据code值判断接口执行的结果,以及异常情况,不应该通过异常捕获判断接口是否正常。所以,这一层的切面异常捕获,应该是一种兜底方案,即facade层无法捕获的异常,避免调用方捕获到异常。

rpc层是调用外部接口的一层,这一层的切面也是捕获非预期结果的异常,而不是有问题就像上抛异常。

比如,查询订单列表的功能,关注结果是不是要达到预期。预期的结果是,这个接口的返回结果应该是一个订单列表,列表两种结果:空或有数据,这种都属于正常的结果,直接向上返就行了。

使用rpc调用时,异常情况有两种,一种是网络连接超时、无服务等,遇到这种异常,直接抛出,因为这种属于非预期错误,导致业务中断。另外一种情况是,rpc返回的结果有success字段标识结果是否正常,true表示调用正常,data数据无论是否为空,都向上返回结果即可;而success=false时,接口含义是无业务逻辑,标识底层错误,那么也应该抛出异常,用来表示出现了导致业务中断的异常。

还有一种接口,比如提单rpc接口,这种接口success=false时,是表示提单失败,这种是有业务含义的,所以不能简单的抛异常,而是将该结果向上向上返回。

 

一些题外话:

对于分布式服务框架的调用,很多人rpc层的返回值直接使用接口的返回值。这种做法是欠妥的,比如订单接口,原来订单的金额用price表示,后来接口提供方进行接口重构时,将金额改成了totalPrice,这种情况,如果上层使用了该字段,则受到影响。所以建议的方式是,将rpc调用返回的结果转换成自己业务中使用对象,使得rpc层也起到一个防腐层的作用。

rpc层中的对象可以以PO结尾。

 

以上,欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值