Usando o FluentValidation no .NET Core

0

Às vezes, existem muitas regras de validação em nossos métodos, como o nome não pode ser nulo, a idade deve ser maior que 18, etc., e como de costume, podemos escrever algum código para definir essas regras:

     static void Main(string[] args)  
    {  
        var addCusDto = new AddCustomerDto();  
        AddCustomer(addCusDto);  
        Console.ReadKey();  
    }  
      
    static void AddCustomer(AddCustomerDto dto)  
    {  
        if (string.IsNullOrWhiteSpace(dto.Name))  
        {  
            Console.WriteLine($"name cannot be null");  
            return;  
        }  
      
        if (string.IsNullOrWhiteSpace(dto.Phone))  
        {  
            Console.WriteLine($"phone cannot be null");  
            return;  
        }  
      
        if (dto.Other <= 0)  
        {  
            Console.WriteLine($"other must great than 0");  
            return;  
        }   
        //save code ...  
    }  
No entanto, este caminho parece não ser muito fácil de entender e/ou escrever. Aqui, apresentarei uma pequena biblioteca de validação chamada FluentValidation, que usa uma interface fluente e expressões lambda para criar as regras de validação.
Você pode seguir este link para mais informações: https://fluentvalidation.net/
Vamos dar uma olhada em como usar essa biblioteca. Antes da próxima seção, precisamos instalar o FluentValidation via NuGet.
Passo 1
Criando o validador.
Precisamos criar uma classe que herda de AbstractValidator <T>, onde T é o tipo de classe que você deseja validar. Para o exemplo de fundo, podemos criar o seguinte validador:
     public class AddCustomerDtoValidator : AbstractValidator<AddCustomerDto>  
    {  
        public AddCustomerDtoValidator()  
        {  
            RuleFor(x => x.Name).NotEmpty().WithMessage("name cannot be null");  
            RuleFor(x => x.Phone).NotEmpty();  
            RuleFor(x => x.Other).GreaterThan(0).WithMessage("other must be great than 0");  
        }  
    }  
O que esse validador faz?
  1. A propriedade Name não está vazia. Se esta propriedade estiver vazia, a mensagem de erro será “nome não pode ser nulo”.
  2. A propriedade Phone não está vazia. Se esta propriedade estiver vazia, a mensagem de erro será o valor padrão.
  3. A propriedade Other deve ser maior que 0. Se essa propriedade não for maior que 0, a mensagem de erro será o valor padrão.
Passo 2
Usando o validador:
     static void AddCustomerWithFluentValidation(AddCustomerDto dto)  
    {  
        var validator = new AddCustomerDtoValidator();  
        var validRes = validator.Validate(dto);  
        if (!validRes.IsValid)  
        {  
            //first error message  
            Console.WriteLine(validRes.Errors.FirstOrDefault());  
            //Console.WriteLine(validRes.Errors.FirstOrDefault().ErrorMessage);  
            ////all error messages  
            //Console.WriteLine(validRes.ToString(","));  
            //Console.WriteLine(string.Join(",", validRes.Errors.Select(x => x.ErrorMessage)));  
            //Console.WriteLine(string.Join(",", validRes.Errors));  
        }  
      
        //save code ...  
    }  
Como você pode ver, acabamos de criar uma instância do validador e chamamos o método de validação passando o objeto dto que queremos validar.
O método Validate retorna um objeto ValidationResult. Ele contém duas propriedades, uma é IsValid que diz se a validação foi bem-sucedida ou não, enquanto a outra é Erros, que contém os detalhes sobre quaisquer falhas de validação.
O exemplo acima mostra como obter a primeira mensagem de erro e todas as mensagens de erro. Você pode retornar a (s) mensagem (s) com base em sua necessidade. Nós só precisamos de dois passos para usar esta biblioteca. 
Existem muitos recursos úteis do FluentValidation, como validadores encadeados:
     RuleFor(x => x.Name)
     .NotEmpty()
     .NotEqual("catcher")
     .WithMessage("name cannot be null");  
Assim, podemos combinar muitos validadores para uma propriedade ou um conjunto delas.
Um grande abraço a todos!
Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com