验证命名约定?C#

7
非常简单的问题,但我想开始使用一致的命名规范来命名验证方法,但是我想不到最好的方式!
人们是否倾向于使用 "IsDataValid()" 风格?或者有其他更具描述性和意义的方式吗?
谢谢。

你是否在做类似这样的事情:http://conditions.codeplex.com/? - cofiem
3个回答

11

这取决于你的验证方法做了什么。

如果它返回一个布尔值,那么以 Is 开头并以 Valid 结尾可能是一个不错的开始。在布尔调用中使用 is 通常会导致在 if 语句中可读性更高的代码。

如果你的验证方法抛出异常,那么我通常会用类似 Check 的东西来开始方法名。

但是,也值得考虑(因为方法通常应该使用动词),即从 Validate 开始方法名称。 Is 样式通常更适用于属性。


9
与任何涉及命名约定的事物一样,没有所谓的“正确”答案,但是在验证方法方面存在许多常见问题,这些问题倾向于采用特定的方法,即:
  • 如果一切正常,您通常只需要验证的布尔状态。
  • 如果有问题,通常需要了解问题的详细信息。
  • 通常希望对象具有类似的验证方法。
我发现一种有用的方法是为要验证的每个模型对象拥有一个单独的验证器类,该类实现了一个通用的IValidator接口,通常具有以下方法:
  • 一个构造函数,它接受要验证的对象。
  • 一个名为IsValid()的属性,它验证对象,返回一个布尔值,但将特定错误存储在私有变量中,因此在需要错误时无需重新计算验证。
  • 一个名为ErrorMessages的属性,它验证对象(如果尚未验证),并返回带有对象的错误列表。
这允许在业务逻辑内具有相当自然的使用方式:
BusinessObject obj = new BusinessObject();

// populate fields

BusinessObjectValidator objValidator = obj.GetValidator();

if (objValidator.IsValid) {
    obj.Save();
} else {
    foreach (var errorMessage in objValidator.ErrorMessages) {
        // output message
    }
}

看起来微软也喜欢这种方法。类似的方法(IValidatableObject)在Asp.Net MVC中被引入,而且它们在.Net Core中一直保留着。我也更喜欢将验证逻辑放在被验证的类中;随着代码库的老化,这样做的机会更小。 - Granger

1
人们倾向于使用IsDataValid()风格吗?
当方法返回单个布尔值时,我通常使用“Is” MethodName风格。从命名的角度来看,这是完全可以接受的。很多时候,数据验证是在属性的Set中完成而不是在方法中完成,因此在这种情况下,您不需要更改属性名称以指示它验证了设置在其上的数据。
这里有一个链接,提供一些通用的命名准则,您可能也会感兴趣:
命名准则: http://msdn.microsoft.com/en-us/library/xzf533w0(v=vs.71).aspx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接