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
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.
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.