前言
今天这篇博文主要来自于我在日常工作中的实践与思考。关于程序容错处理与代码健壮性层面,我将介绍一些个人的心得体会,以及关于如何保证代码健壮性的编码原则。以下内容为经验总结,欢迎读者留言交流。
缘由
我为什么会写这篇文章呢,主要原因是我最近工作中实际遇到的问题启发。
任何问题都不会孤立存在,它的出现既是“偶然”也是“必然”。
“偶然”是指大家经常会把一些低频问题归结为某某原因,范式为:它未按预期提供响应数据字段,所以挂了。如果怎么怎么样,就不会发生这种情况。
“必然”是指通过现象看本质来说,产品中出现的任何BUG,它都是有深层原因的。如果不去挖掘,问题将得不到彻底根治,久而久之所导致的结果就是:没过多久,类似的问题又重新出现了。所谓“必然”,也正因如此。
我们所遇到的问题现象
说回到我之前提到的工作问题,它们的具体表现如下:
- 后端rest接口调整后,使用了新的响应数据字段名(旧字段直接被移除了)。导致前端获取数据报错,产品用户无法正常使用对应功能。
- 底层数据因操作不当引入了脏数据用户,开发在数据库层面进行了数据清理。但未清理完全,导致数据完整性遭到破坏,最终导致前端获取想要的数据失败引起报错。
这两类问题分别代表了两种我们日常工作中会遇到的两种行为类型,即:
- 主观接口变更
- 无意识的数据完整性约束破坏
归结原因:程序容错
出现以上问题的根源,我认为主要是我们一个工作没完全做好。它是什么呢?对于稍有编程经验的同学应该可以想到,那就是:程序容错。
无论系统的复杂度如何,我们都应该有一种编程意识,即对于非自我可控/熟悉的输入数据来说,都需要对其进行输入容错处理。这样做虽然从代码量,代码阅读性来说会有一定的损失,但长远来看,这种做法的价值是极其巨大的。
谁都不想自己一手构建的系统,因一个极小的数据容错问题导致系统不可用。因小失大,对我们来说并不划算,它所付出的代价相比投入来说相差实在太大了。
从代码健壮性上来看程序容错
从程序容错角度也会引申出一个更大的话题,那就是代码的健壮性。
代码的健壮性很多时候是依赖于程序容错的处理。换句话说就是:
程序容错处理的得当与否直接决定了代码的健壮性。
它对代码健壮性的影响是极其深远的。
程序容错的几个原则
如果从编码实践来看,我认为可以有以下几个原则可以作为指导。
具体内容如下:
- 对自我可控的程序输入可作选择性的容错(明确的不可能场景可以不处理容错)
- 对任何第三方的响应数据作为输入的,必须完成输入数据的容错处理(具体做法可以是两种:校验不通过的数据直接报错/直接过滤掉其中的错误数据)
- 对于容错的处理需要有一定程度的抽象,为后续逻辑变更降低影响面和成本做好基础设计
后记
有了指导原则,那么我们就需要在编码过程中不断实践。不断地通过积累编码经验来实现自己对程序容错处理的理解,编写出健壮性更好,质量更高代码的愿望。
这条路没有捷径,只能通过原则与实践不断的摸索,总结与反思。一步一个脚印地往前走,只要有目标和行动,总有一天会实现自己的目标。