“系统中每行代码,都应该是有意义的,如果一段代码可有可无,那它就不应该存在。”
01—内容简述
异常处理是软件开发的必备技能,但“异常处理,究竟是处理什么?”,很多小伙伴并没有一个清晰的认识,大部分人的认识停留在给代码加上try/catch就算是异常处理了,至于异常捕获之后该做什么,并不清楚。本文阐述一下自己对异常处理的思考,希望帮助大家对异常处理有一个清晰的认识,在面对异常处理时,能够有准确的决策。.
02—区分异常和错误
相信到这里,很多小伙伴心里已经有答案了,比如,平时遇到最多的——空引用异常,应该算是错误,这是可以通过代码逻辑避免的。而真正的异常是无法预料的,比如:网络中断、请求超时、堆栈溢出、第三方服务异常…等。
03—异常处理要做什么
异常处理概括起来要做三件事:
记录异常日志是为了后续排查,定位,解决异常问题,需要记录的信息包括:
异常发生时间,异常代码位置,以及异常时上下文信息(参数),当前操作人等;
如果是Web请求,还要记录请求的IP地址,URL,客户端设备信息;
记录异常信息的原则是:帮助开发人员还原异常现场,快速定位异常原因,以便尽快修复。
2.确保非托管资源的关闭和释放
推荐使用 using 语句声明非托管资源,而不是用try/catch,可以查看我之前的文章 C# using()的本质
3.处理异常后续业务逻辑
主要是业务处理逻辑中事先规划的异常发生后的处理逻辑,比如:
某个服务接口请求超时后进行重试;
某个功能操作失败后,切换到备选方案(降级)或触发补偿事件;
在多线程中,当某个子线程异常之后,取消其他相关子线程操作;
自定义异常的处理。
04—处理方案
视实际业务场景而定,可以在代码中加try/catch,也可以开发通用的异常处理组件,让业务逻辑更简洁清晰。
05—总结
-
通过代码规范,尽量减少系统中可控的异常(错误)发生。
-
通过全局异常组件,记录异常日志,处理通用异常。
-
仅在业务逻辑明确需求的情况下,使用try/catch处理异常。
06—成长轨迹