Modelando validações de dados com DataAnnotations em C#

Raywall Malheiros
3 min readSep 5, 2022

--

Fala galera, tudo certo? Hoje vamos falar um pouco sobre DataAnnotations e como utiliza-lo como ferramenta para validação de dados nas requisições de nossas API's.

Há um tempo atrás eu soltei um post falando sobre o que é BFF (para quem não leu, segue o link), naquele post eu compartilhei um repositório no GitHub com o exemplo que montei para explicar BFF, e vamos utilizar o mesmo código para falar de DataAnnotations.

O DataAnnotations surge à partir da versão do .NET Framework 4.0 (também disponível no.NET Core), como um conjunto de classes de atributos que são usadas para definir metadados, mas que também podem ser usadas para realizar validação de dados em nossas API's.

Esta biblioteca é uma verdadeira mão na roda na hora de validar as requisições, minimizando a quantidade de linhas de código escritas, e dando velocidade aodesenvolvimento.

Como não utilizamos nenhuma validação no exemplo que construimos para falar de BFF, o código se torna perfeito para exemplificarmos aqui como fazer uso do DataAnnotations para realizar nossas validações.

No exemplo abaixo temos exemplo comum de código, utilizado para realizar validação de dados. Nele, o desenvolvedor implementa uma serie de condiçoes para criar sua estrutura de validação.

Não estou alegando que esta estrutura não está correta, mas existe uma forma mais otimizada de realizar estas validações, centralizando as regras e condições em nossa classe Produto.cs, e facilitando a manutenção futura da aplicação.

O DataAnnotations dispõe de uma série de classes que podem ser utilizados para construir as regras de validação dos nossos atributos.

Atributos básicos de validação do DataAnnotations

Aqui estão alguns atributos do DataAnnotations que podem ser utilizados para montar as regras de validação da nossa classe Produto.cs

Existem alguns outros complementos que podem complementar as regras, como o ErrorMessage, responsável por definir a mensagem de erro e o AllowEmptyStrings que indica que valores em branco são permitidos.

Let's code

Acho que já temos insumo suficiente para começar a colocar a mão na massa e ajustar aquele nosso projeto da BFF, construindo as validações da nossa classe Produto.cs

Não sei se percebeu, mas no exemplo acima, ali na linha 28, utilizamos um atributo chamado MinValue que não existe no DataAnnotations. O que fizemos aqui foi criar uma customização, herdando a classe ValidationAttribute do DataAnnotations e utilizando-a para construir o nosso próprio atributo de validação.

Claro que isto poderia ser feito com expressoes regulares, mas a idéia aqui foi mostrar a flexibilidade que voce pode ter na hora de construir seu modelo de validação.

Para finalizar, precisamos apenas realizar a validação dos dados lá na nossa ProdutosController.cs

E se você preferir, pode colocar o esquema de validação dentro de um metodo de extensão e chamar a partir do proprio objeto produto.

O DataAnnotations realiza todas as validações que montamos em nossa classe, e retorna uma lista detalhada dos erros encontrados, fazendo uso das mensagens de erro que especificamos anteriormente.

Requisição via postman do metodo SetProduto da classe ProdutosController.cs

Aplicando na prática o que vimos aqui, no exemplo acima enviamos uma requisição com alguns campos propositalmente não preenchidos, e obtivemos três falhas de validação, informando que a quantidade de produtos em estoque, a descrição do produto e código de barras do produto não foram informados.

Se você não conhecia o DataAnnotations, acho que agora já consegue brincar um pouco com ele, e aplicá-lo em seus projetos daqui para frente.

Espero que tenha gostado do conteúdo, e se quiser dar uma olhadinha, o código fonte utilizado neste artigo pode ser visualizado aqui.

--

--

Raywall Malheiros
Raywall Malheiros

Written by Raywall Malheiros

Senior Software Engineer and TechLead at Itaú Unibanco | 4x AWS Certified

No responses yet