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

时间:2009-01-20 13:58:05

标签: coding-style

根据以下方案/代码,在哪里进行验证的正确位置:

仅在MethodA中:因为这是外部程序集要使用的公共方法? 在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)
    {
    }
}

4 个答案:

答案 0 :(得分:2)

无论调用者的位置如何(组件内部或外部),都应始终执行参数验证。可以说是防御性编程。

答案 1 :(得分:1)

MethodC;这样,即使有人稍后出现并且在A类中添加对MethodC的调用,或者他们将MethodC公开,也始终检查参数。任何例外都应该被鼓泡到可以最好处理的地方。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

鉴于更有可能的Senario将涉及每个方法具有不同的参数,也可能涉及一些

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

在较长期内输入类型逻辑在入口点验证每个参数更有意义,特别是因为您可能需要根据调用方法的位置进行不同的错误处理。

如果给定参数的验证逻辑开始变得复杂(即超过五行代码),那么请考虑使用私有方法来验证该参数。