FluentValidation入门指南:创建第一个验证器

FluentValidation入门指南:创建第一个验证器

FluentValidation A popular .NET validation library for building strongly-typed validation rules. FluentValidation 项目地址: https://gitcode.com/gh_mirrors/fl/FluentValidation

什么是FluentValidation

FluentValidation是一个功能强大且灵活的.NET验证库,它采用流畅的接口(Fluent Interface)设计模式,使得验证规则的编写更加直观和易于维护。与传统的属性注解验证方式相比,FluentValidation提供了更丰富的验证功能和更好的可测试性。

创建第一个验证器

1. 定义模型类

首先,我们需要一个要验证的模型类。例如,我们有一个客户(Customer)类:

public class Customer 
{
    public int Id { get; set; }
    public string Surname { get; set; }
    public string Forename { get; set; }
    public decimal Discount { get; set; }
    public string Address { get; set; }
}

2. 创建验证器类

要为Customer类创建验证器,我们需要继承AbstractValidator<T>基类:

using FluentValidation;

public class CustomerValidator : AbstractValidator<Customer> 
{
    public CustomerValidator()
    {
        // 验证规则将在这里定义
    }
}

3. 添加验证规则

在验证器类的构造函数中,我们可以使用RuleFor方法来定义验证规则。例如,确保Surname不为空:

public CustomerValidator()
{
    RuleFor(customer => customer.Surname).NotNull();
}

4. 执行验证

创建验证器实例并调用Validate方法来验证对象:

Customer customer = new Customer();
CustomerValidator validator = new CustomerValidator();

ValidationResult result = validator.Validate(customer);

5. 处理验证结果

Validate方法返回一个ValidationResult对象,包含两个重要属性:

  • IsValid:布尔值,表示验证是否通过
  • Errors:包含所有验证失败的详细信息集合

处理验证结果的示例代码:

if(!result.IsValid) 
{
    foreach(var failure in result.Errors)
    {
        Console.WriteLine($"属性 {failure.PropertyName} 验证失败。错误信息: {failure.ErrorMessage}");
    }
}

进阶验证技巧

链式验证

FluentValidation支持链式调用,可以在一个属性上定义多个验证规则:

RuleFor(customer => customer.Surname)
    .NotNull()
    .NotEqual("foo")
    .Length(2, 50);

验证异常处理

除了手动检查ValidationResult,还可以让验证失败时自动抛出异常:

validator.ValidateAndThrow(customer);

这会抛出一个ValidationException异常,其中包含所有错误信息。

复杂属性验证

对于嵌套对象的验证,可以创建独立的验证器并重用:

public class AddressValidator : AbstractValidator<Address> 
{
    public AddressValidator()
    {
        RuleFor(address => address.Postcode).NotNull();
    }
}

public class CustomerValidator : AbstractValidator<Customer> 
{
    public CustomerValidator()
    {
        RuleFor(customer => customer.Name).NotNull();
        RuleFor(customer => customer.Address).SetValidator(new AddressValidator());
    }
}

或者使用内联验证:

RuleFor(customer => customer.Address.Postcode)
    .NotNull()
    .When(customer => customer.Address != null);

最佳实践建议

  1. 单一职责原则:每个验证器应该只负责验证一个特定类的规则
  2. 可重用性:对于复杂属性,创建独立的验证器以便重用
  3. 明确性:为每个验证规则提供清晰的错误信息
  4. 性能考虑:避免在验证器中执行复杂的数据库查询或耗时操作
  5. 测试覆盖:验证逻辑应该被充分测试,确保各种边界条件都被覆盖

通过FluentValidation,开发者可以创建清晰、可维护且功能强大的验证逻辑,大大提升应用程序的数据完整性和用户体验。

FluentValidation A popular .NET validation library for building strongly-typed validation rules. FluentValidation 项目地址: https://gitcode.com/gh_mirrors/fl/FluentValidation

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庞燃金Alma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值