Usamos Data Annotation para validação de dados dos nossos Models, além disso, definem regras de requisitos de bancos de dados e outras configurações de mapeamento diretamente no código do modelo. Ao colocar os decoradores antes do atributo desejado, é adicionado um comportamento que permite o .NET runtime executar esses processamentos adicionais que possibilitam a validação dos campos, propriedades e classes.

public class Order
{
    [Key]
    public int OrderID { get; set; }

    [Required(ErrorMessage = "CustomerName is required")]
    [StringLength(100, ErrorMessage = "CustomerName cannot be longer than 100 characters")]
    public string CustomerName { get; set; }

    [RegularExpression(@"^\\d+.?\\d{0,2}$", ErrorMessage = "Invalid total")]
    [Range(1, 500, ErrorMessage = "Total must be between 1 and 500")]
    public decimal Total { get; set; }
}

Vantagens e Desvantagens

Vantagens

  1. Simplicidade: Fáceis de entender e aplicar, tornam o código mais legível e intuitivo, principalmente para quem está começando
  2. Integração com ASP NET MVC: Por ser altamente integradas com o ASP NET MVC, elas são automaticamente utilizadas nas validações do lado do servidor e cliente em formulários
  3. Menos código: Por serem declarativas, podem reduzir a quantidade de código boilerplate necessário para definir regras de validação

Desvantagens

  1. Limitação em Complexidade: Em cenários complexos onde é preciso maior controle como as entidades são mapeadas para o bancos de dados, podem ser insuficientes. Por exemplo, relacionamento complexos entre entidades, chaves compostas ou configurações específicas de colunas.
  2. Mistura de Preocupações e Responsabilidades: Pode misturar as preocupações e responsabilidades de mapeamento de banco de dados com a lógica do negócio, que leva um acoplamento indesejado entre essas camadas.
  3. Dificuldade em Manter e Escalar: Em projetos grandes, onde as entidades possuem muitas proriedades e relações complexas, usar Data Annotation pode levar a um modelo (model) difícil de manter. Todas as regras de validação e mapeamento são embutidas no modelo, o que pode dificultar a manutenção e evolução do código.

FluentAPI