如果你有一系列对某些数据进行操作的函数,最好让每个函数在使用之前验证数据是否有效,或者在链的开头进行验证并且链中的每个函数都只是“相信”它是有效的吗?
答案 0 :(得分:1)
应用防御性编程始终是一种好习惯。你应该考虑所有可能的场景。
如果输入来自用户,则验证变得非常重要,在这种情况下,您必须确保您的代码知道在每个无效数据方案中要做什么。尝试对可以预测的情况进行断言,对不可预测的情况进行例外处理,详细信息取决于您使用的语言。这是防弹计划的基础。
答案 1 :(得分:0)
取决于链上的较低功能是否被自己调用将在很大程度上影响您的决定。如果你有一个严格分层的系统,某些类只被你程序的其他类调用,那些内部类可以有更轻的数据检查和“信任”数据。
来自Steve McConnell的“Code Complete 2”:
“防御性编程目的的障碍的一种方法是将某些接口指定为”安全“区域的边界。检查数据是否跨越安全区域的边界以确保其有效性,并在数据无效时做出明智的响应。可以在班级使用相同的方法。该类的公共方法假设数据不安全......一旦数据被类的公共方法接受,该类的私有方法就可以假定数据是安全的。“