美文网首页
契约式编程与防御式编程

契约式编程与防御式编程

作者: hemiao3000 | 来源:发表于2022-02-24 07:15 被阅读0次

1. 防御式编程

对于 “防御式编程” ,《代码大全》给我们提供了一个定义:

    人类都是不安全、不值得信任的,所有的人,都会犯错误,而你写的代码,应该考虑到所有可能发生的错误,让你的程序不会因为他人的错误而发生错误。

程序需要对可能的错误输入,你需要作出预防。预防的手段可以有如下两种:

  • 做出兼容,允许本轮执行。(例如,参数字符串不允许为 null,如果传入 null,我给它一个默认值:"",以替代它的原始值 null)

  • 错误提示,终止本轮执行,提示重新再来。

简而言之,防御式编程,就是持怀疑态度审视所有的代码:「总有刁民想害朕」。

2. 契约式编程

什么是 “契约式编程” ?

     简单的说,契约作用于两方,每一方都会完成一些任务,从而促成契约的达成,但同时,每一方也会接受一些义务,作为制定契约的前提,有任意一方无视了必尽义的义务,则契约失败。

契约式编程要求我们在「前提条件」、「后继条件」和「不变量条件」进行契约的检查。类似的,例如检查参数,一旦参数不对,当即撕毁契约。

契约所约束的,是「一个为了确保程序正常运行的条件」,一旦契约被损毁,只有一个原因,那就是程序出了 Bug。

例如,一个参数,在我处理的时候,必须保证是不为空的。那么谁来保证这一点呢?一定是我的调用方(或者说是其它模块),所以,一旦出现问题,应该由调用方来检查,确保调用的时候,必须是不为空的。

契约式编程可以严格区分责任,让每个人都不必为了迁就他人的错误而进行「艰难的编码」。每个人按照契约处理好自己的事情,让损毁契约的人承担责任。

相关文章

  • 安全编程的实现方式

    借鉴文章 契约式编程与防御式编程 https://segmentfault.com/a/1190000007558...

  • 契约式编程与防御式编程

    1. 防御式编程 对于 “防御式编程” ,《代码大全》给我们提供了一个定义: 人类都是不安全、不值得信任的,所有的...

  • About Smoke: 防御性编程与契约式编程

    Smoke 与契约式、防御性编程 Smoke 是我写的一个给Dto做Validation 的小工具(https:/...

  • 华山论剑之契约式编程与防御式编程

    背景 事情的来由还要从几十几亿年前的一次星球大爆炸说起,sorry,背错台词了,是从几天前讨论接口返回数据和几个月...

  • 2019-03-31契约式编程与防御式编程

    背景 事情的来由还要从几十几亿年前的一次星球大爆炸说起,sorry,背错台词了,是从几天前讨论接口返回数据和几个月...

  • 防御式编程

    最近业余时间在阅读《代码大全》,阅读“防御式编程”章节的时候非常受启发,自己之前对系统的错误处理这块也确实随意了。...

  • 防御式编程

    编写优秀的代码 代码是程序可识别的代码 代码是程序员可识别的代码 防御性编程 防御性编程(Defensive pr...

  • 防御式编程

    防御式编程 在防御式驾驶中要建立这样一种思维,那就是你永远也不能确定另一位司机将要做什么。这样才能够确保在其他人做...

  • 声明式编程与命令式编程区别

    声明式编程 与 命令式编程: 命令式编程:描述计算机所做行为的编程规范 声明式编程:响应式编程属于声明式编程的一种...

  • 《Kotlin入门实战》CH5 | 函数与函数式编程

    函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperati...

网友评论

      本文标题:契约式编程与防御式编程

      本文链接:https://www.haomeiwen.com/subject/uwxzlrtx.html