在软件开发中针对用户的输入每每不是咱们所期待的那样(不知足前置条件),有时候软件内部每每也会出现一些咱们不易察觉的错误,针对这种状况,一些人持有乐观的态度,而另一些人则从一个其余的事情中获得了启发:即由防护式驾驶而想到的防护式编程。程序员
所谓防护式编程,指的就是这样一件事情:即咱们假定使用者都是白痴,他们可能在输入时进行各类各样的操做,这来源于防护式驾驶:即假定路上开车的都是疯子,你要提早制定策略防止他们撞到你或者你撞到他们,所以你必需要保证万无一失,而不是采起投机取巧的方法。心理学上有一个定律叫作墨菲定律,即任何你认为不会发生的事都有可能发生。编程
在软件开发中也正是如此,好比咱们想开发一个航班管理系统,在用户进行必定的输入以后就会将全部的航班信息展现到显示屏上。可是事情每每不顺遂人意。用户可能输入并不存在的飞机,发往并不存在的机场,用户也可能和你玩恶做剧,为航班不分配飞机,那样的话全部人就只能干等。诸如此类,这仅仅是一个小小的例子,若是机场信息版出了问题可能还不是什么大毛病,可是假如这个开发机场管理系统的人同时也去开发了银行管理系统,那结果可能就不太乐观了。前些天美国用百万年薪来招聘一些会上古语言的老程序员,由于这些程序设计语言被用做银行管理系统几十年,中间并无出过什么大问题,所以一直没有进行更新换代和相应的维护,从中咱们也能够窥见一个鲁棒性较强的平台是多么重要,这几十年维护省下来的钱可能也能用于更多的用途吧(;》)设计模式
ok,当咱们了解到防护式编程的意义以后,咱们就须要考虑怎样实现防护式编程,具体而言有如下几个方法:设计
▪Protecting programs from invalid inputsci
▪ Assertions开发
▪ Exceptionsinput
▪ Specific error handling techniquesio
▪ Barricade程序设计
▪ Debugging aids软件
在这里我并不打算展开讲述,具体可参考MIT 软件构造课程的课件。我只想说一下里面的Barricade,这个所谓的障碍物模式,其实是将程序内部与外界隔离开,咱们经过人为的设置防火墙,来规避那些外界可能存在的风险,有点像设计模式中的proxy,经过中介来进行数据处理交换,将风险委托给别人,也不失为一种很好的开发策略。