我们正在编写一个低级函数库(主要模拟一些Matlab sig处理函数) - 基本上是静态对象上的一组静态方法。然后将在更高级别的框架中使用它(我们也在编写)。框架和低级库都供内部使用(非公开)。
这种情况的优秀异常处理模型是什么?我看到的两个选项是:
1.在低级别lib中没有异常处理 - 让零除等异常只是冒泡并在消费框架中处理它们
2.在每个低级函数中系统地检查可能产生溢出的值的参数,除以零,-ve num等的意外根,并抛出带有关于问题的诊断文本的ArgumentException。
2.提供优势超过1.证明附加代码的合理性吗?我的感觉是,这可能会使问题更容易发生 是否存在做其中一个的争论?
答案 0 :(得分:1)
答案在很大程度上取决于所讨论的图书馆:
通常,最好在'public'* API上执行参数验证。如果发生故障,您所做的事情取决于您,但抛出带有信息性文本描述的ArgumentException是一个好主意,对使用您的库的开发人员很有帮助。
有许多资源在各种场景中讨论该主题,包括关于程序员的类似问题:Should a method validate its parameters?。忽略它被标记为重复 - 它不是真的。
如果要向普通大众开放库,不验证参数会导致各种安全漏洞,因为没有绑定检查数组而不是验证指针会导致以最意想不到的方式注入恶意代码和地方!
关于CRT库函数,Microsoft有一些关于该主题的话要说:Parameter Validation。
我的(个人)建议是选择2:验证您的参数并抛出有意义的例外。
*“公共”的含义可以解释。