假设您正在开发一个(PHP,但这无关紧要)库,其他开发人员有时会使用该库。这个库很好地覆盖了单元测试以确保它按预期工作,一些边缘情况也被测试,比如在明显错误的参数上抛出异常(比如传递一个数组,其中需要一个标量值等)。是否应该编写更多的单元测试并在代码中构建更多的值检查以确保永远不会传递无效值并抛出异常,同时牺牲性能或者应该停止并记录允许无意义的值,但不应该'不通过?
例如,你编写了一个 URL 类,你可以选择允许设置一个包含无效字符或长度错误等的主机值。你应该允许它并希望其他开发人员永远不会传递错误的值,还是你应该写检查并牺牲性能以支持完整性?
只有一个意见...我认为除非您控制两端,否则您不能信任 API 用户。
如果您不是唯一要使用它的人,您需要确保只有“OK 值”会通过 API 的第一层。
为了防止性能问题,您可以考虑相反的方法(如果它适用于解决方案需求和实现),而不是搜索所有错误的案例和输入,您可以尝试检查值是否正确,如果不正确则抛出异常(即,可以使用 REGEX 角色检查主机值以确保它是正确的模式,否则将抛出异常)。
有几个标准\问题可以帮助做出该决定:
现在和将来谁会使用您的服务?考虑公司扩张甚至收购等场景。
谁会受到“错误输入”案例的影响?它是否只会影响导致它的单个操作,或者它可能会影响其他 future 操作甚至其他用户(例如,导致系统崩溃,将无效数据插入数据库、文件或全局内存等)。
您能否信任将要使用您的服务及其数据的人?他是否从另一个可能已损坏或无效的来源获取数据?
验证检查的费用是多少?与需要完成的其余工作相比(性能方面)是否昂贵,如果是这样,是否可以更有效地编写它?
这些问题的答案有助于找到适合特定场景的正确解决方案。
我通常选择 Defensive programming方法。