知识卡片

后置检查昂贵

普通读书笔记卡 · 1711.d

内容

后置条件常需要保存旧状态并比较新旧状态,代码量可能超过业务逻辑本身。发散:高风险代码值得严密后置检查,普通代码更常用测试和关键不变式来获得足够信心。

参考来源

- 位置:《你真的会写代码吗-2021》第5章《有自我意识的代码:通过监控实现可靠性》"5.5.3 检查契约"及"5.2 基于契约设计水容器"中postAddWater的实现(源文件:_epub-src/OEBPS/Text/0015.xhtml) - 结论依据:原文明确"add方法会以特定方式大量修改有界集的状态,强化的add方法需要先对有界集的当前状态进行备份",并展示`postAddWater`需要复制旧状态、逐项比较新旧集合内容,代码量明显超出`addWater`本身的业务逻辑。 - 原始内容:思考一下add方法的后置条件,这是两个契约中最有趣的部分。由于add方法会以特定方式大量修改有界集的状态,强化的add方法需要先对有界集的当前状态进行备份……最后,以下代码展示了实际检查后置条件的私有支持方法。它首先检查新添加的元素是否位于当前set的最前面……最后,它会比较add方法执行前后所有其他元素的位置(它们应该相同)。