我被告知永远不要假设传入数据的有效性(参考用户输入 - 我总是验证),但是,是否有任何理由采用相同的方法在对象方法之间传递参数?
在对方法参数执行操作时,即使我 99.9% 确定传入参数将具有有效数据,我是否应该始终验证它们?
我被告知永远不要假设传入数据的有效性(参考用户输入 - 我总是验证),但是,是否有任何理由采用相同的方法在对象方法之间传递参数?
在对方法参数执行操作时,即使我 99.9% 确定传入参数将具有有效数据,我是否应该始终验证它们?
这取决于。
您应该仅在输入可能无效时进行验证,例如库中的公共方法、适用于用户输入的方法等。
不验证的方法应该通过外观设计模式或附加层对用户屏蔽。
一遍又一遍地验证相同的事情会增加维护代码时出错的风险,不会提供太多额外的安全性并增加代码库的大小。
通常,这就是我会使用
assert
声明,如果选择的语言提供。优点是您可以表达参数的前置/后置条件,它们用作未来开发人员的注释,并且通常可以通过编译器/解释器的标志来切换,以免代码因断言错误而崩溃。
在计算机编程中,断言是放置在程序中的谓词(真假语句),以表明开发人员认为该谓词在该位置始终为真。-关于断言的维基
至少您应该验证边界层(例如 Facades)中公共方法的参数。在其他情况下,您应该考虑是否需要验证您的参数。另一个热点是持久化,我建议你在持久化方法中验证参数。