DEV Community

Fábio Carvalho
Fábio Carvalho

Posted on • Updated on

Saia do Loop - Data Annotation.

Bem vindo a série Saia do Loop ! No tutorial de hoje nós vamos falar de Data Annotation (ou anotações de dados) que existem dentro da programação C#. Dito isso, vamos começar criando um projeto vázio de console utilizando qualquer versão do .Net 3.1 para cima em nosso Visual Studio Community.

Aplicação vazia .Net e C#

Vamos começar criando uma nova classe chamada Pessoa. Para isso no seu projeto, clique com o botão direito e em seguida clique em Add e em seguida Class.

Na classe Pessoa.cs que criamos, vamos adicionar alguns campos. Sendo eles Nome, Idade e Data de Nascimento.

 public class Pessoa
    {
        public string Nome { get; set; }
        public int Idate { get; set; }
        public DateTime DataDeNascimento { get; set; }
    }
Enter fullscreen mode Exit fullscreen mode

Ótimo, com o nosso objeto Pessoa criado, vamos entender agora como as Data Annotation funcionam. As datas annotations são usadas para import regras em propriedades de classe. Por exemplo, em nosso objeto Pessoa nós queremos que o nome seja obrigatório e que tenha no mínimo 3 caractéres. Ou seja, todo nome precisa ter ao menos 3 letras para ser considerado um nome válido.

Dito isso, usando data annotation nós podemos criar essa regra diretamente em nossa propriedade, veja o exemplo abaixo:

    public class Pessoa
    {
        [Required]
        [MinLength(3, ErrorMessage = "Nome precisa ter pelo menos 3 caracteres.")]
        public string Nome { get; set; }
        public int Idade { get; set; }
        public DateTime DataNascimento { get; set; }
    }

Enter fullscreen mode Exit fullscreen mode

No exemplo anterior, nós incluímos duas notações (data annotation) a Required e MinLenght, sendo que na segunda, nós passamos 2 parâmetros, o primeiro é o número mínimo de caractéres que é 3, e em seguida definimos uma mensagem de erro.

Para entender mais, a Microsoft tem uma excelente documentação sobre que você pode ver neste link.

Mas continuando, ao incluir as anotações e dados em seu código, você deverá notar que automaticamente um novo using será adicionado a sua classe.

código c# e using

Este using é necessário para utilizarmos as anotações, então tenha atenção para não esquecer a sua referência. Dito isso, vamos incluir mais anotações para os demais campos.

  • O campo idade deverá ter entre 0 e 150 anos
  • O campo de data devera ser válido, e não ser menor que 1900 ou maior que 31/12/2099
    public class Pessoa
    {
        [Required]
        [MinLength(3, ErrorMessage = "Nome precisa ter pelo menos 3 caracteres.")]
        public string Nome { get; set; }

        [Range(0, 150, ErrorMessage = "Idade deve ser entre 0 e 150.")]
        public int Idade { get; set; }

        [DataType(DataType.Date)]
        [Range(typeof(DateTime), "1/1/1900", "12/31/2099", ErrorMessage = "Data fora do intervalo permitido.")]
        public DateTime DataNascimento { get; set; }
    }
Enter fullscreen mode Exit fullscreen mode

Preste anteção que a princípio a data está no formato americano, isso se deve porquê por padrão a anotação valida no formato americano, para formatar e validar no padrão brasileiro, é necessário construir uma anotação customizada.

Por exemplo, caso tivéssemos a seguinte classe em nosso projeto:

   public class BrazilianDateAttribute : ValidationAttribute
    {
     public DateTime MinDate { get; set; }
        public DateTime MaxDate { get; set; }

        public BrazilianDateAttribute(string minDate, string maxDate)
        {
            MinDate = DateTime.ParseExact(minDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
            MaxDate = DateTime.ParseExact(maxDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
        }

        public override bool IsValid(object value)
        {
            DateTime date;
            var isValid = DateTime.TryParseExact(
                Convert.ToString(value),
                "dd/MM/yyyy",
                CultureInfo.CurrentCulture,
                DateTimeStyles.None,
                out date
            );

            return isValid && date >= MinDate && date <= MaxDate;
        }
Enter fullscreen mode Exit fullscreen mode

Poderiamos usar a validação da seguinte maneira:

public class Pessoa
    {
        [Required]
        [MinLength(3, ErrorMessage = "Nome precisa ter pelo menos 3 caracteres.")]
        public string Nome { get; set; }

        [Range(0, 150, ErrorMessage = "Idade deve ser entre 0 e 150.")]
        public int Idade { get; set; }

        [BrazilianDate("01/01/1900", "31/12/2099", ErrorMessage = "Data fora do intervalo permitido.")]
        public DateTime DataNascimento { get; set; }
    }
Enter fullscreen mode Exit fullscreen mode

Com isso, dentro de nossa Program.cs, estamos prontos para criar um exemplo em nosso método Main e testarmos as validações:

static void Main(string[] args)
        {
            var pessoa = new Pessoa
            {
                Nome = "Jo", //Nome incorreto
                Idade = -1, //Idate incorreta
                DataNascimento = new DateTime(3000, 1, 1) // Data fora do intervalo
            };

            var results = new List<ValidationResult>();
            var isValid = Validator.TryValidateObject(pessoa, new ValidationContext(pessoa), results, true);

            if (!isValid)
            {
                foreach (var validationResult in results)
                {
                    Console.WriteLine(validationResult.ErrorMessage);
                }
            }

            Console.ReadKey();
        }
Enter fullscreen mode Exit fullscreen mode

Execute, a aplicação e veja os erros que irão acontecer no console.

Erros

E pronto, com isso você já deve entender a ideia do que são as Data Annotations, um famoso recurso do C#.

Nos vemos no próximo tutorial! :)

Top comments (1)

Collapse
 
gubsocosta profile image
Gabriel Costa

Simples e direto. Muito bem explicado.