A Importância da Validação com FluentValidation em Aplicações ASP.NET MVC

Quando estamos desenvolvendo aplicações web, especialmente aquelas que lidam com o cadastro e manipulação de dados sensíveis como em um sistema de consultas médicas, garantir a integridade e a consistência desses dados é essencial. Uma das formas mais elegantes e eficazes de realizar essa tarefa no ASP.NET é por meio da biblioteca FluentValidation. Neste artigo, vou mostrar como utilizei o FluentValidation na minha aplicação ASP.NET MVC para validar o cadastro de médicos e quais benefícios essa abordagem trouxe para o projeto. Por que usar FluentValidation? O FluentValidation é uma biblioteca popular no ecossistema .NET que permite definir regras de validação de forma fluente, limpa e separada da lógica do controlador ou modelo. Ele promove um código mais organizado, reutilizável e fácil de manter. Ao invés de usar DataAnnotations diretamente no ViewModel, podemos centralizar as regras de negócio em uma classe separada, mantendo o princípio da responsabilidade única (SRP) e favorecendo a injeção de dependência, facilitando testes unitários e manutenções futuras. Como foi aplicado na minha aplicação Na minha aplicação de gerenciamento de médicos, implementei uma classe AdicionarMedicoValidator para validar os dados enviados ao tentar adicionar um novo médico ao sistema. Essa classe herda de AbstractValidator e define regras claras para os campos do ViewModel. Exemplo de Validador public class AdicionarMedicoValidator : AbstractValidator { public AdicionarMedicoValidator(SisMedContext context) { RuleFor(x => x.CRM).NotEmpty().WithMessage("CRM é obrigatório") .MaximumLength(20).WithMessage("O CRM deve ter no máximo {MaxLength} caracteres.") .Must(crm => !context.Medicos.Any(m => m.CRM == crm)).WithMessage("Este CRM já está em uso."); RuleFor(x => x.Name).NotEmpty().WithMessage("Nome é obrigatório") .MaximumLength(200).WithMessage("O Nome deve ter no máximo {MaxLength} caracteres."); } } Registro do Validador no Program.cs Para que o FluentValidation reconheça automaticamente os validadores, basta registrá-los no container de injeção de dependência: builder.Services.AddScoped(); Utilização no Controller Dentro do MedicosController, a validação é chamada explicitamente antes de salvar os dados: [HttpPost] [ValidateAntiForgeryToken] public IActionResult Adicionar(AdicionarMedicoViewModel dados) { var validacao = _adicionarMedicoValidator.Validate(dados); if (!validacao.IsValid) { validacao.AddToModelState(ModelState, string.Empty); return View(dados); } var medico = new Medico { CRM = dados.CRM, Name = dados.Name }; _context.Medicos.Add(medico); _context.SaveChanges(); return RedirectToAction(nameof(Index)); } Essa abordagem separa claramente as responsabilidades: O ViewModel representa apenas os dados. O Validator define as regras. O Controller coordena a operação. Benefícios dessa abordagem Manutenção facilitada: As regras de validação estão centralizadas em um único lugar. Reutilização: O mesmo validador pode ser utilizado em diferentes partes da aplicação. Legibilidade: A sintaxe fluente torna o código mais expressivo e fácil de entender. Testabilidade: As regras podem ser testadas isoladamente com testes unitários. Conclusão O FluentValidation é uma poderosa ferramenta para garantir que os dados que entram na sua aplicação sejam válidos, consistentes e seguros. Em sistemas mais complexos, como o de gestão de profissionais de saúde, essa validação se torna ainda mais essencial para evitar duplicações, inconsistências ou falhas críticas. Utilizá-lo com ASP.NET MVC proporciona uma estrutura robusta, modular e pronta para escalar com segurança e qualidade.

Apr 22, 2025 - 05:01
 0
A Importância da Validação com FluentValidation em Aplicações ASP.NET MVC

Quando estamos desenvolvendo aplicações web, especialmente aquelas que lidam com o cadastro e manipulação de dados sensíveis como em um sistema de consultas médicas, garantir a integridade e a consistência desses dados é essencial. Uma das formas mais elegantes e eficazes de realizar essa tarefa no ASP.NET é por meio da biblioteca FluentValidation.

Neste artigo, vou mostrar como utilizei o FluentValidation na minha aplicação ASP.NET MVC para validar o cadastro de médicos e quais benefícios essa abordagem trouxe para o projeto.

Por que usar FluentValidation?

O FluentValidation é uma biblioteca popular no ecossistema .NET que permite definir regras de validação de forma fluente, limpa e separada da lógica do controlador ou modelo. Ele promove um código mais organizado, reutilizável e fácil de manter.

Ao invés de usar DataAnnotations diretamente no ViewModel, podemos centralizar as regras de negócio em uma classe separada, mantendo o princípio da responsabilidade única (SRP) e favorecendo a injeção de dependência, facilitando testes unitários e manutenções futuras.

Como foi aplicado na minha aplicação

Na minha aplicação de gerenciamento de médicos, implementei uma classe AdicionarMedicoValidator para validar os dados enviados ao tentar adicionar um novo médico ao sistema. Essa classe herda de AbstractValidator e define regras claras para os campos do ViewModel.

Exemplo de Validador

public class AdicionarMedicoValidator : AbstractValidator<AdicionarMedicoViewModel>
{
    public AdicionarMedicoValidator(SisMedContext context)
    {
        RuleFor(x => x.CRM).NotEmpty().WithMessage("CRM é obrigatório")
            .MaximumLength(20).WithMessage("O CRM deve ter no máximo {MaxLength} caracteres.")
            .Must(crm => !context.Medicos.Any(m => m.CRM == crm)).WithMessage("Este CRM já está em uso.");

        RuleFor(x => x.Name).NotEmpty().WithMessage("Nome é obrigatório")
            .MaximumLength(200).WithMessage("O Nome deve ter no máximo {MaxLength} caracteres.");
    }
}

Registro do Validador no Program.cs

Para que o FluentValidation reconheça automaticamente os validadores, basta registrá-los no container de injeção de dependência:

builder.Services.AddScoped<IValidator<AdicionarMedicoViewModel>, AdicionarMedicoValidator>();

Utilização no Controller

Dentro do MedicosController, a validação é chamada explicitamente antes de salvar os dados:

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Adicionar(AdicionarMedicoViewModel dados)
{
    var validacao = _adicionarMedicoValidator.Validate(dados);

    if (!validacao.IsValid)
    {
        validacao.AddToModelState(ModelState, string.Empty);
        return View(dados);
    }

    var medico = new Medico
    {
        CRM = dados.CRM,
        Name = dados.Name
    };

    _context.Medicos.Add(medico);
    _context.SaveChanges();

    return RedirectToAction(nameof(Index));
}

Essa abordagem separa claramente as responsabilidades:

  • O ViewModel representa apenas os dados.
  • O Validator define as regras.
  • O Controller coordena a operação.

Benefícios dessa abordagem

  1. Manutenção facilitada: As regras de validação estão centralizadas em um único lugar.
  2. Reutilização: O mesmo validador pode ser utilizado em diferentes partes da aplicação.
  3. Legibilidade: A sintaxe fluente torna o código mais expressivo e fácil de entender.
  4. Testabilidade: As regras podem ser testadas isoladamente com testes unitários.

Conclusão

O FluentValidation é uma poderosa ferramenta para garantir que os dados que entram na sua aplicação sejam válidos, consistentes e seguros. Em sistemas mais complexos, como o de gestão de profissionais de saúde, essa validação se torna ainda mais essencial para evitar duplicações, inconsistências ou falhas críticas.

Utilizá-lo com ASP.NET MVC proporciona uma estrutura robusta, modular e pronta para escalar com segurança e qualidade.