【摘要】
SQL的进攻式编程{OffensiveCoding with SQL}
与之对应防御式编程Code defensively:在开始处理之前先检查所有参数的合法性。
进攻式编程的本质特征是:以合理的可能性(reasonable probabilities)为基础。
比较二者:常规的编程都是采用防御式编程,用户录入什么,程序得检查录入是否合法,比如前台开发、业务逻辑开发;在数据库编程中,尽量同时做几件事情的进攻式编程有切实的优势(注意仅仅是针对据库编程)。进攻式编程在数据库编程的前提是,以合理的假设基础上开发,定义错误集合。
举例:
在信用卡付款的处理:
1、检查提交的客户身份和卡号是否有效,以及二者是否匹配;
2、检查信用卡是否过期
3、检查当前的支付额是否超过信用卡额度。
4、通过上述检查后,才执行支付操作。
防御式编程,预先使用3个查询语句来检查这些信息;
进攻式编程,直接支付操作,条件必须满足上述3个前提;支持成功,@@RowCount=1;反之,@@RowCount=0,这个时候再查询一个错误集合,以特定的结论来判断是那个部分错误。
执行效率来说,进攻式编程要简洁、更节约时间
个人认为:无论防御还是进攻,都要以成功且二者输出一致作为最终判断;成功执行的基础上,考虑防御和进攻策略