Validação Fluente vs. Anotações de Dados [fechado]

123

Quais são as diferenças operacionais entre esses dois pacotes de validação quando usadas para validação do ASP.NET MVC? Eles parecem ter objetos semelhantes, até o nome dos objetos. Um está relacionado com outro? Quais são as diferenças deles? De que maneira essas diferenças denotam diferentes casos de uso?

SiberianGuy
fonte
52
Também é interessante notar que as perguntas que são encerradas como não construtivas geralmente têm muitos votos positivos, portanto são realmente úteis para as pessoas. Tem que haver algo errado com isso
Dmitry Efimenko
2
Concordo que esse tipo de pergunta é útil, mas as respostas abaixo parecem mais opiniões para mim e não fatos.
precisa
3
Também concordo completamente, porém perguntar "quais são as diferenças" em vez de "quais são suas preferências" provavelmente teria evitado a situação.
Jeremy A. West
Eu acho que o negócio é que você precisa redigir para que as respostas sejam menos baseadas em opiniões do que factuais. Não pergunte: "Qual é o seu favorito?" mas "Quais são as diferenças operacionais entre?" Então você não obtém respostas como "Prefiro validação fluente". mas, em vez disso, coisas que primeiro diferem primeiro e apresentam descobertas depois.
Ruffin

Respostas:

113

Prefiro Validação Fluente :

  1. Isso me dá um controle muito melhor de minhas regras de validação
  2. Fazer validação condicional em diferentes propriedades é muito mais fácil comparado às anotações de dados
  3. Ele separa a validação dos meus modelos de exibição
  4. O teste de unidade é muito mais fácil comparado às anotações de dados
  5. Possui excelente suporte de validação do lado do cliente para a maioria das regras de validação padrão
Darin Dimitrov
fonte
6
Mais alguns pontos deste artigo ( webdevbros.net/2010/12/03/… ): 1. Muitas anotações fazem o seu modelo parecer feio (semelhante ao ponto 3) 2. Melhor reutilização 3. Melhor desempenho (sem reflexo) )
SiberianGuy
2
@Idsa O ponto de desempenho parece dúbio. A reflexão precisa acontecer apenas uma vez por modelo. Isso pressupõe uma boa implementação, não sei como essa implementação específica funciona.
CodesInChaos
@CodeInChaos, parece que você está certo. Mas vou mantê-lo lá, pois também não tenho certeza (e com preguiça de descobrir) como ele é implementado.
SiberianGuy
2
Eu segundo a Validação Fluente ... é demais. Do ponto de vista do código do TOC, eu amo que ele remove a responsabilidade da validação das visualizações e lhe dá suas próprias classes. Tentei o xVal por algum tempo no MVC1 ... As anotações de dados eram boas para coisas simples, mas uma vez que você tinha mais do que um punhado de regras, mal sabia o que o ViewModel deveria representar.
Brandon Linton
@Darin, como você transmite as mensagens de erro na visualização? você pode fornecer um exemplo de como fazer isso?
Jaime Sangcap
32

Eu claramente prefiro Anotações de Dados porque ...

  1. todas as regras de validação podem ser configuradas em um local no código (dentro da classe de metadados do modelo) e não precisam ser repetidas em nenhum outro lugar.
  2. existe um excelente suporte para validação do lado do cliente (novamente - sem repetição de regras de validação!) ao usar atributos de Anotação de Dados .
  3. Os atributos da anotação de dados podem ser testados para garantir que eles estejam lá.
  4. existem bons atributos de validação adicionais criados pela comunidade (por exemplo, Extensões de anotações de dados ).
Marius Schulz
fonte
2
Eu acho que a maioria dessas propriedades pode ser alcançada com alguma forma de validação fluente. Não sei se a biblioteca do OP suporta isso, mas, em princípio, é possível e também não é muito difícil.
CodesInChaos
Qual o sentido de testar a presença de atributos? Isso não é basicamente repetir regras de validação?
Sam
30
@ Sam: Ao testar se as propriedades são decoradas com atributos de Anotação de Dados, você não testa a funcionalidade do próprio atributo; você está apenas certificando-se de que está lá. Devo dizer que agora, dois anos depois, estou do lado de Darin e concordo com a resposta dele.
Marius Schulz
@ Sam, porque você provavelmente quer saber se alguém o remove do seu modelo.
1737 Steve Steve
3
Ótimo comentário Marius. Pena que a maioria dos tutoriais da EF nos dias de hoje mostra validação feita com anotações de dados. Eu também fiquei inicialmente envolvida pela simplicidade das anotações, mas logo após tentar implementar uma regra de validação personalizada, entrei imediatamente na equipe Validação Fluente ... Aliás, pena que Darin tenha parado de postar :( A maioria das seus comentários em StackOverflow estão no local depois de mais de 5 anos !!!
Koshera