何处嵌套方法

问题描述:

在哪里是执行给定以下情形/下面的代码验证的适当位置内执行参数验证:何处嵌套方法

在治法只:因为这是其目的是要通过外部组件一起使用的公共方法? 在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) 
    { 
    } 
} 
+0

在SO上引用代码是通过缩进所有行4个空格而不是通过代码标记完成的。 – 2009-01-20 13:59:36

参数验证应始终执行,而不管呼叫者的位置(组件内部还是外部)。可以说,防御性编程。

除了遵循DRY原则并避免将验证代码复制到多个位置外,没有“适当”的地方。我通常建议你延迟验证到最新的阶段,因为如果参数从未被使用过,你不需要花时间验证它。这也验证了它使用的地方的一些地方,你永远不需要想'哦,这个参数是否已被验证?'因为验证就在那里。

MethodC;通过这种方式,参数总是被检查,即使稍后有人出现并从类A中向MethodC添加调用,或者他们使MethodC公开。任何异常都应该冒泡到最好的地方。

鉴于一个更可能塞纳里奥将涉及具有每一种方法的不同参数,并且还可能在HTE更长期它更有意义在进入点来验证每个参数一些

 
if (P1 == 1) { MethodA(P2) } else { MethodB(P2) } 

类型的逻辑,escpecially如您可能需要不同的错误处理,具体取决于调用方法的位置。

如果给定参数的验证逻辑开始变得复杂(即多于五行代码),则考虑一个私有方法来验证该参数。