C# Fluent验证和库
前几天在寻找完全不同的东西时,我偶然发现了两个在.NET中进行流畅验证的库。 这个概念似乎很有趣,因为到目前为止,我使用常用的条件语句和分支语句(if、else、case等)进行验证 特别是,它可以相对容易地链接某些条件(在某些情况下可能导致复杂条件的代码更短),并在同一对象中为每个违规嵌入多条错误消息 这就是说,这不是也让代码看起来比C语言更冗长吗?通常情况下,有时有点像t-SQL。。。这难道不会导致代码的外观不一致吗 简言之,您如何看待Fluent验证?如果您喜欢,您发现哪个库最适合它?到目前为止,我已经看到了和第一眼看上去差不多的东西C# Fluent验证和库,c#,.net,validation,fluent,C#,.net,Validation,Fluent,前几天在寻找完全不同的东西时,我偶然发现了两个在.NET中进行流畅验证的库。 这个概念似乎很有趣,因为到目前为止,我使用常用的条件语句和分支语句(if、else、case等)进行验证 特别是,它可以相对容易地链接某些条件(在某些情况下可能导致复杂条件的代码更短),并在同一对象中为每个违规嵌入多条错误消息 这就是说,这不是也让代码看起来比C语言更冗长吗?通常情况下,有时有点像t-SQL。。。这难道不会导致代码的外观不一致吗 简言之,您如何看待Fluent验证?如果您喜欢,您发现哪个库最适合它?到目
谢谢。我自己偶然发现了类似的东西,我写的正是这样,代码就不会那么冗长了 我有自己的验证,我做了如下事情:
Validation.IsNullOrEmpty(m => m.FirstName, modelState);
Validation.Validate(m => m.ZipCode, z => z.Length == 5, modelState,
"ZipCode must be 5 characters long");
现在,这与我使用的MVC体系结构密切相关,但我发现这比:
if (string.IsNullOrEmpty(FirstName))
{
ModelState.AddError("FirstName", "FirstName cannot be empty.");
}
在这种情况下,它并不那么明显,但是当您进行验证时,您可以有许多项要验证,因此一行程序变得更容易扫描并了解验证在做什么
你确实有第一次遇到我放在那里的第一个代码,你必须弄清楚发生了什么,但是一旦你过去了,我认为一堆一行代码比第二种方法产生的多个代码块更容易理解。我正在使用我自己发布的验证库 与您建议的两个不同之处在于,验证被放在单独的验证类中。您可以创建和忘记验证类,它们由验证库自动发现
public class MyModelValidator : FluentValidator<MyModel>
{
public MyModelValidator()
{
Property("FirstName").Required();
Property("LastName").Required().Min(15);
}
}
并配置:
Validator.LanguageHandler = new StringTableProvider();
实际验证如下所示:
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.
}
还有
它使用fluent接口助手类向引擎添加规则(然后用于验证对象)
支持组合、跨域、条件、多语言等
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.
}