【发布时间】:2011-09-24 12:11:20
【问题描述】:
假设您有一个应用程序,它是您所有业务逻辑的某种前端。这个前端有很多它依赖的 DLL,并且这些 DLL 中的方法可能会在前端中给定方法的单次执行时重复调用对方。如果您的应用程序的用户不直接访问这些 DLL,您应该...
1) 冒着(小)性能损失的风险并在每种方法中验证参数,即使您最终可以验证相同的参数大约 5 次;或
2) 冒着意外行为的风险,并假设在验证输入参数时,传入和传出内部代码的所有其他可能参数都是有效的(例如,既不是 null 也不是空的)?
编辑:举个例子,假设你有一个正则表达式RegexA和一个方法
internal bool Matches(string expression)
{
return RegexA.IsMatch(expression);
}
IsMatch 将在 null 参数上引发异常,但不会在空字符串上引发异常。如果您事先知道空字符串永远不会与该 Regex 匹配,那么您是否应该在之前使用 if (String.IsNullOrEmpty(expression)),即使知道它可能会在 IsMatch 框架方法中被验证为无效?在这种情况下,您显然是在重复验证,但是重复验证还是冒险更好?
【问题讨论】:
-
我不明白你所说的“即使你最终可以验证相同的参数大约 5 次”的意思
-
@Bumble Bee:他的意思是当你的程序执行沿着堆栈向下移动时,可能有十几个方法检查
value != null。因此,对同一个值执行多次相同的逻辑,而不是根本不检查。
标签: c# validation parameter-passing