何处嵌套方法
问题描述:
在哪里是执行给定以下情形/下面的代码验证的适当位置内执行参数验证:何处嵌套方法
在治法只:因为这是其目的是要通过外部组件一起使用的公共方法? 在MethodA和B中,因为这两个都可以在课堂外访问? 或方法A,B和C,因为方法C可能被另一个内部方法使用(但它可能效率不高,因为程序员已经可以看到MethodC的代码,因此应该能够知道要传递的有效参数)?
感谢您的任何意见。
public class A
{
public void MethodA(param)
{
MethodB(param);
}
internal void MethodB(param)
{
MethodC(param);
}
private void MethodC(param)
{
}
}
答
参数验证应始终执行,而不管呼叫者的位置(组件内部还是外部)。可以说,防御性编程。
答
除了遵循DRY原则并避免将验证代码复制到多个位置外,没有“适当”的地方。我通常建议你延迟验证到最新的阶段,因为如果参数从未被使用过,你不需要花时间验证它。这也验证了它使用的地方的一些地方,你永远不需要想'哦,这个参数是否已被验证?'因为验证就在那里。
答
MethodC;通过这种方式,参数总是被检查,即使稍后有人出现并从类A中向MethodC添加调用,或者他们使MethodC公开。任何异常都应该冒泡到最好的地方。
答
鉴于一个更可能塞纳里奥将涉及具有每一种方法的不同参数,并且还可能在HTE更长期它更有意义在进入点来验证每个参数一些
if (P1 == 1) { MethodA(P2) } else { MethodB(P2) }
类型的逻辑,escpecially如您可能需要不同的错误处理,具体取决于调用方法的位置。
如果给定参数的验证逻辑开始变得复杂(即多于五行代码),则考虑一个私有方法来验证该参数。
在SO上引用代码是通过缩进所有行4个空格而不是通过代码标记完成的。 – 2009-01-20 13:59:36