关于异常处理的一些理解

在程序中出现bug是一个很正常的事情,也是程序员不得不去面对的事情,本文不对如何解决异常做说明,主要想讲的问题是关于程序中各个方法之间调用的时候入参及返回值的问题。

在程序中我们为了避免NPE异常到处都是各种if null判断,当然这种做法本身是没有什么什么问题的,而且为了保证程序的健壮性我们有时候是必须要这么做的,但是这种做法一个是会让我们的代码看起来十分的混乱,再一个就是有时候有的判空处理确实是多余的。对于程序中判空的异常处理要形成逻辑上的闭环,从最开始的参数层层传递到最后的返回值层层传递每一层都是有必要进行相关的判断的,但是如何避免不必要的判断呢,个人的思路就是对于入参我们统一全部做入参校验,对于返回的数据我们一般直接返回不要进行处理,返回值的处理交给上层的调用者去进行处理而不是判断完了再返回出去。

登录过程大家应该都是非常熟悉的,下面就对一个最简单的登录逻辑说一下个人理解的逻辑上的闭环。这里就从最低成的dao层说起,dao层接收service层的参数然后调用数据库的相关操作得到一个查询结果,我们登陆的时候传进来的参数应该是用户名和密码信息,对于传进来的参数我们当然是要进行合理性的判断的,不然我们在调用数据库的相关的操作的时候是很容易抛出Exception的。返回值的话一般是Boolean类型表示是否登录成功,或者返回的是一个User模型,这里我们假定返回的是一个User模型,我们从数据库查询得到这个User模型之后是要把它交给service层的,对于数据库的查询结果我们是必须要进行合理性的判断的,但是在dao层我们不关心这个事情,我只是负责把你要的数据查询出来给你,我把数据给你了至于合理性的判断的事情你自己去做吧。好了到了serivice层我们接受的参数有servlet或者controller层传过来的用户名密码信息,在这里我们照样还是对于入参全部进行合理性校验,然后service层必定是要调用dao层得到登录的结果的,在这里对于数据库的查询结果不论什么情况下都是必须要进行合理性判断的。service层应该是作为我们核心业务逻辑的地方,在这里数据起到一个中转的作用,controller层我只是把参数给你我只要我要的结果,至于其他的你怎么实现我并不关心,dao层也只是接收到你service层的参数从数据库中返回你想要的结果,至于这个结果是不是真的是你想要的我也不关心,那么这些工作都是需要service层自己来完成的。对于controller层的入参我们必须要进行校验,对于返回的值我们也是应该根据不同的数据库查询结果给出不同的返回状态,让controller层针对不同的返回值给前端返回不同的响应结果。

说到这里有的人可能要讲了前面不是讲对于放回的值不进行处理直接返回吗?其实在这里没有必要非常认真的去探讨这些东西,我们一定要抓住两个重点:第一个是搞清楚我们分层的程序设计中每个层的职责,第二个就是前面提到的形成逻辑是上的闭环。当然在实际的开发中我们更多的还是多个人分工来进行一个程序的开发的,那我怎么知道你传给我的参数是不是合理的,那我传递出去的参数其他人是不是又会进行合理性的判断呢,所以我们有的时候为了避免不必要的问题产生我们对于入参及返回值都进行了处理。这种情况感觉还是依赖于一个团队的规范吧。这里就不进行多讲了。

还有一个问题就是对于程序中间的异常的处理,对于很多初学的人来讲我们害怕程序中出现异常,那我就把整段的程序全部try…catch…起来,那这样你就不会抛出异常了把。这种做法我们的程序确实是不会抛出异常了,但是在有的时候这个是会掩盖了我们程序本身的逻辑上的错误的。我们的程序并不是不允许出异常的,有的时候我们通过观察分析异常日志是可以帮助我们找到程序设计之中的有问题的地方的,不合理的try…catch…有时候会适得其反。有的时候我们的前端没有数据或者数据异常,但是我们的后端又没有任何的报错,这种情况下我们怎么去寻找问题点?这种问题的发生一般有两种比较常见的缘由,第一个就是我们的业务逻辑有问题,再一个就是我们不合理的异常处理掩盖了程序本身的错误,这两种错误处理起来都是非常耗时间的,那么我们如何去避免后面一种失误呢?在这里我个人的一些理解就是对于异常我们都尽量往上层抛,在最上层调用者处进行处理,在进行catch的时候尽量catch最大的异常,catch之后一定要保存日志信息帮助我们以后排查问题,不管是我们使用框架的通用异常处理方式还是自定义了异常处理方式都有必要对于这些异常进行包装返回给前端的,站在客户的角度来说大多数人并看不懂什么事404,什么是500,我们必须要给客户一个好的浏览体验,在出现异常之后也要在前端给出一些引导操作。

这里只是我个人的一些理解,在日常的工作中我们每个人都应该养成自己的编码风格习惯,这样我们就会发现有时候这些习惯不经意之间就会起到一些作用的。也希望大家都能码出未来,码出精彩人生!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值