你的代码又导致资金损失了?活该!
请观察,下面switch代码有什么漏洞?
BankPayStatus bankPayStatus=...; // 银行侧返回的付款状态 switch (bankPayStatus) { // 付款成功的处理 case SUCCESS: if (condition){ ... update return; } // 付款失败的处理 case FAIL: ... return; // 其他场景,按付款中来处理 default: ... return; }
再看下面付款代码案例。开发组里已经明确约定“支付红线”:在进行付款时,程序出现任何异常都不能直接将支付单置为付款失败。可是,依旧有开发者大意。
void pay(PayOrder payOrder) { try { AlipayOrderRequest orderRequest = buildAlipayOrderRequest(payOrder); AlipayOrderResponse response = alipaySender.sendPost(orderRequest); payOrder.setTransCode(response.subCode);
payOrder.setTransMsg(response.subMsg); payOrder.setPayStatus(PAYING); } catch (Exception e) { log.error("调用通道异常", e); payOrder.setPayStatus(FAIL); } payOrderRepository.updatePayRequest(payOrder); }
人往往就是这样,很多事情,别人再怎么提醒和警告,自己也不加小心,非等到自己掉坑里了,才长记性。
自己掉坑里,长了记性,这还算比较好的。吃一堑长一智嘛!
而那些在同一个坑里多次翻车的,是不是又可怜又可笑呢?
“这家伙,得拉出去突突两分钟!”
出现bug后,一般有两种心态:
- 啊?原来这样实现会出现bug呀!涨姿势了!
- 我知道这里可能会出bug,不过可能应该不会有那一天,以后再说吧。
压根儿就不知道,是可以理解的。毕竟,人的知识积累是有一个过程的。
知道,却麻痹大意,视而不见,甚至明知故犯,这才是要命的。
我们看下面的2013年~2018年全国交通事故发生情况汇总分析(资料来源:中国统计年鉴)。据不完全统计,老司机出现重大交通事故的概率,远高于新手。为什么?大家可以琢磨。
我们看下面的微信支付官方文档截图。图中是支付结果通知的接口文档。当商户收到支付结果回调的报文后,在做相关逻辑处理时,微信支付团队给出了“特别提醒”。大家可以细品一下。为什么要给这么一个“特别提醒”呢?很简单,因为系统生产运行过程中出现过类似的事故呀。
不仅微信文档哦,很多公司的接口对接文档里,都有把类似注意事项描述的很清晰。
我曾经一个老战友多次强调“敬畏上线”。就是说,每次对生产系统的发版和更新,心中要有仪式感,且不可随随便便,想一出是一出。不光要“敬畏上线”,要“敬畏”我们所敲打的每一行代码!
当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--buguge
本文来自博客园,转载请注明原文链接:https://www.cnblogs.com/buguge/p/13192782.html