Coding style 在嵌套方法中执行参数验证的位置

Coding style 在嵌套方法中执行参数验证的位置,coding-style,Coding Style,鉴于以下场景/代码,执行验证的适当位置在哪里: 仅在MethodA中:因为这是要由外部程序集使用的公共方法? 在MethodA和B中,因为它们都可以在类外访问? 或者方法A、B和C,因为方法C可能被另一个内部方法使用(但可能没有效率,因为程序员已经可以看到方法C的代码,因此应该能够知道要传递的有效参数) 谢谢你的意见 public class A { public void MethodA(param) { MethodB(param);

鉴于以下场景/代码,执行验证的适当位置在哪里:

仅在MethodA中:因为这是要由外部程序集使用的公共方法? 在MethodA和B中,因为它们都可以在类外访问? 或者方法A、B和C,因为方法C可能被另一个内部方法使用(但可能没有效率,因为程序员已经可以看到方法C的代码,因此应该能够知道要传递的有效参数)

谢谢你的意见

public class A  
{     
    public void MethodA(param)  
    {  
         MethodB(param);  
    }  

    internal void MethodB(param)
    {
          MethodC(param);
    }

    private void MethodC(param)
    {
    }
}

无论调用方位于何处(程序集内部或外部),都应始终执行参数验证。防御性编程,可以这样说。

没有一个“合适”的地方,除非遵守枯燥的原则,避免将验证代码复制到多个地方。我通常会建议您将验证延迟到可能的最新阶段,因为如果从未使用该参数,那么您不需要花费时间来验证它。这也为验证提供了它所使用的位置的一些位置,并且您不需要考虑“哦,这个参数已经验证了吗?”因为验证就在那里。

MethodC;这样,参数总是被检查,即使有人稍后出现并从类a中添加了对MethodC的调用,或者他们将MethodC公开。任何异常都应该被冒泡到可以最好地处理的地方。

考虑到更可能的senario会涉及每个方法都有不同的参数,也可能有一些参数

if (P1 == 1) { MethodA(P2) } else { MethodB(P2) } if(P1==1){MethodA(P2)}else{MethodB(P2)} 从长远来看,在入口点验证每个参数更有意义,特别是因为您可能需要根据调用hte方法的位置进行不同的错误处理


如果给定参数的验证逻辑开始变得复杂(即超过五行代码),则考虑一种私有方法来验证该参数。< /P>引用SO代码是通过缩进所有行4空格来完成的,而不是通过代码标记来完成的。