Use FluentValidation para criar um sotisficado framework de validação

7 out

Fala Galera,

Como todos sabem, validação de dados é um passo muito critico dentro do desenvolvimento de uma aplicação. É nela que mantemos a integridade e a qualidade dos dados que guardamos na base de dados. Muitos desenvolvedores utilizam o Data Annotation do ASP.MVC para fazer a validação e ele continua sendo um ou o mais popular framework de validação.

Porém um novo framework de validação vem crescendo muito dentro da comunidade é o FluentValidation e por que ? Eis alguns motivos:

  • Facilidade de integração a testes de unidade
  • Separação das regras de validação  com o modelo de dados
  • Fácil leitura das regras de validação

O que é FluentValidation

FluentValidation é uma biblioteca para se criar validação de dados de forma simples e rápida, podemos usar sua a programação fluente e expressões Lambda para construir regras de validações.

O FluentValidation é uma biblioteca open-source mantida pela comunidade e hospedada no GitHub através deste endereço: https://github.com/JeremySkinner/FluentValidation

Vamos ao nosso exemplo de utilização do FluentValidation. Primeiro irei criar um projeto ASP.MVC, após criado vamos adicionar o FluentValidation.

O FluentValidation também está no NuGet então para isso basta adicionar o comando Install-Package FluentValidation.MVC5 no Package Manager Console conforme mostrado na figura

fluentvalidation

Agora vamos criar um modelo de produto, conforme código abaixo:

public class Product
{
        public Guid Id { get; set; }
        public String Name { get; set; }
        public String Description { get; set; }
        public DateTime CreateDate { get; set; }
        public Decimal Price { get; set; }
}

Agora como o nosso modelo criado, devemos ativar o FluentValidation, para isso abra o Global.asax e adicionar o código abaixo

public class MvcApplication : System.Web.HttpApplication
{
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            FluentValidation.Mvc.FluentValidationModelValidatorProvider.Configure();
        }
}

Com o FluentValidation ativado podemos criar classes de regras de validação. Vamos criar um classe chamada ProductValidator e adicionar o código abaixo

public class ProductValidator : AbstractValidator<Product>
   {
       public ProductValidator()
       {
           this.RuleFor(x => x.Name).NotEmpty().WithMessage("Nome é obrigatório")
               .Length(1, 40).WithMessage("Nome não pode ser maior que 40 caracteres");

           this.RuleFor(x => x.Description).NotEmpty().WithMessage("Descrição é obrigatório")
               .Length(1, 255).WithMessage("Descrição não pode ser maior que 255 caracteres");

           this.RuleFor(x => x.Price).NotEmpty().WithMessage("Preço é obrigatório")
               .GreaterThan(0.0M).WithMessage("Preço do produto deve ser maior que zero");


       }
   }

 

Agora vamos voltar ao modelo de produto, vamos abri a classe Product e adicionar o atributo do FluentValidation.

[Validator(typeof(ProductValidator))]
public class Product
{
    public Guid Id { get; set; }
    public String Name { get; set; }
    public String Description { get; set; }
    public DateTime CreateDate { get; set; }
    public Decimal Price { get; set; }
}

Agora vamos testar se tudo ocorreu bem, vamos criar um formulário de criação para o nosso produto e testar se as validações estão todas corretas.

fluentvalidation1

 

Como podemos ver todas as validações estão corretas e conforme especificado na nossa classe de validação.

Caso deseje saber mais sobre o FluentValidation, veja a documentação neste link

O código deste projeto está em meu GitHub neste link

Abs e até a próxima.

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *