我会像你需要的那样防御。我想有点模棱两可,但我会尽力解释。
正确使用方法时,如果该方法具有输入参数,则必须确定这些参数的期望值。在应用程序中的情况和位置,这将有所不同。例如,如果某个方法或一段代码正在接受来自用户输入的数据,那么您将希望覆盖所有代码基础并相应地处理任何输入,无论是通过错误消息还是通过某种不错的方式来显示不可接受的数据。
如果该方法是公开的API同上。您无法控制即将发生的事情,因此您应该期望尝试涵盖所有方面并据此进行编程。
对于在项目核心引擎中生成的方法,您可以在这里做出决定。我是否假定要对到达的数据进行预筛选和验证,然后再进行必要的检查。我猜这取决于方法的概念水平,是否可以接受检查。所以我可能要考虑的是:
1)这是我唯一需要做此检查的地方吗?是否需要为此条件在许多不同位置检查此变量。如果可以的话,我可以在连锁店的更高处进行一次检查,然后再确认
2)是否期望系统的其他组件能够与我编写的方法和接口一起使用。如果是这样,您可以通过调试断言语句,调试异常,方法注释和常规系统体系结构来控制所需的结果,或者是否需要对数据进行检查。
3)代码目前的失败结果是什么。会导致整个事情失败吗?是否会在其他地方发现任何错误,并且至少会发现该错误。
4)在这里进行检查是否有意义?有时检查一些可能损坏的数据,尽管此时可以帮助解决问题,而不会出错,则可能会掩盖它。此时,您可能需要花费数小时来追踪另一个问题,而只是发现实际问题是由于对事件链中的数据回溯进行了有效检查,这些事件级联到报告了用户/开发人员的事件上。
总的来说,我是一名防御性程序员,但是我也相信,通过全面的TDD和适当的单元测试,您可以按要求的级别对代码进行检查,并确信一旦进入任何较低级别的部分,它都可以正常工作。