流畅的验证和库

Kha*_*uez 5 .net c# validation fluent

在前几天寻找完全不同的东西时,我偶然发现了两个用于在.NET中进行Fluent验证的库.这个概念看起来很有趣,因为到目前为止,我正在使用通常的条件语句和分支语句(if,else,case等)进行验证.

特别是,它可以相对容易地链接一些条件,这些条件可能导致某些情况下复杂条件的较短代码,并为同一对象中的每个违规嵌入若干错误消息.

也就是说,是不是也让代码看起来比C#通常更冗长,有时候有点像T-SQL ......并且这不会导致代码具有不一致的外观和感觉?

简而言之,您如何看待Fluent Validation,如果您喜欢它,您认为哪个库最适合它?到目前为止,我已经看过http://tnvalidate.codeplex.com/http://fluentvalidation.codeplex.com/,乍一看似乎或多或少等同......

谢谢.

jga*_*fin 2

我正在使用我在这里发布的自己的验证库。

您建议的两者的区别在于验证被放入单独的验证类中。您可以创建并忘记验证类,它们会被验证库自动发现。

public class MyModelValidator : FluentValidator<MyModel>
{
  public MyModelValidator()
  {
    Property("FirstName").Required();
    Property("LastName").Required().Min(15);
  }
}
Run Code Online (Sandbox Code Playgroud)

使用您自己喜欢的本地化库(例如字符串表)也可以轻松添加对本地化的支持

public class StringTableProvider : ILanguagePrompts
{
    public string this[string modelName, string propertyName]
    {
        get { return Get(modelName, propertyName) ?? "[" + propertyName+ "]"; }
    }

    public string Get(string modelName, string propertyName)
    {
        return Resource1.ResourceManager.GetString(modelName + "_" + propertyName);
    }
}
Run Code Online (Sandbox Code Playgroud)

并配置:

Validator.LanguageHandler = new StringTableProvider();
Run Code Online (Sandbox Code Playgroud)

实际的验证是这样完成的:

User user = new User();
user.FirstName = "Jonas";

var errors = Validator.Validate(user);
if (errors.Count > 0)
{
    // Handle the errors in any way you like.
    // both property names (localized and actual property name) and localized error message is accessible.
}
Run Code Online (Sandbox Code Playgroud)