对防御式编程——免遭非法输入数据破坏 的理解

  在微软大牛的鼓励下,终于鼓起勇气开通博客,来开始记录自己的学习历程,也希望能与更多的人来分享。

  最近刚好在看一些书,看到防御式编程的时候有相见恨晚的感觉,于是就从这里开始写下第一篇博客吧。

 

  记得自己大一的时候刚学习C语言的时候总是带着怀疑的态度去写代码(也许是处女座的原因吧 - -#),于是乎看形参总是不顺眼。

想着总是有可能会危害自己的软件运行(现在看来当时的想法是对的),于是总是加了很多if...else,不过带来的好处就是健壮性比同学的好。

  接触“防御式编程”这个词也是在最近,而第一节就是“保护程序免遭非法输入数据的破坏”。

这节中提到通常处理进来垃圾的三种方法:

  一、检查所有来源与外部的数据的值。

    这个我一看就很亲切,这也是我总喜欢做的,尤其是接受用户输入的数据的时候,感觉是人就有可能犯错误。

    对外部的数据总是检查的时候一是能确保是处于可接受的取值范围,二是能防止溢出。

    这在我看来像是一座房子的大门,首先就应该把不速之客挡在门外。

  二、检查子程序所有输入参数的值

    这点其实和第一点有很大的相似之处,只是在于检查的是来自其他的子程序的参数,而不是外部的值。

    第一点很好理解,也能很好的重视,但在这点也是我经常忽略的,想着反正前面已经做了数据检查,后面应该没问题。但现在看在觉得之前的想法是多么的短浅。

    而问题在于:

      1.其他的子程序并不能保证处理数据的正确性,当传过来的数据已经是“垃圾数据”的时候你必须得隔离程序,包容错误造成的损害。

      2.在团队开发的时候你永远不能保证每个人写的代码都是非常高的质量,绝对不出错,所以你得必须确定拿到的数据不是“垃圾数据”。

    这步我觉得就像一座大房子的房门或者窗户。

  三、决定如何处理错误的输入数据

    当不幸发生,接收到了“垃圾数据”的时候应该如何应对、处理,而处理的方式方法也很多,就算到了最坏的情况应该也能优雅的提示用户然后退出。

    有时也能够很好的处理“垃圾数据”。例如得到一个人的年龄,在通用的情况下是 0到130之间,当的到的数据是负数或者大于130你能够提示用户,或者去边界值,

    而不会出现负数的年龄以及几百上千岁的笑话了。

 

  总之在我看来,越是要编写出接近完美的代码,就越是要注意细节上面的东西,而这种看似微小的错误却很有可能引发大的错误,而防范这种错误收获可能远远超出想象。

转载于:https://www.cnblogs.com/boingTan/archive/2012/10/06/2712912.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值