Validazione fluida e annotazioni dei dati [chiuso]


123

Quali sono le differenze operative tra questi due pacchetti di convalida quando vengono utilizzati per la convalida ASP.NET MVC? Sembrano avere oggetti simili, fino ai nomi degli oggetti. Uno è correlato all'altro? Quali sono le loro differenze? In che modo queste differenze denotano casi d'uso diversi?


52
È anche interessante notare che le domande chiuse in quanto non costruttive di solito hanno molti voti positivi, quindi in realtà sono utili alle persone. Deve esserci qualcosa di sbagliato in questa cosa
Dmitry Efimenko

2
Sono d'accordo che questo tipo di domanda sia utile ma le risposte di seguito mi sembrano più opinioni e non fatti.
Ian Warburton

3
Anch'io sono completamente d'accordo, tuttavia chiedere "quali sono le differenze" invece di "quali sono le tue preferenze" probabilmente avrebbe evitato la situazione.
Jeremy A. West

Penso che il problema sia che devi esprimerlo in modo che le risposte siano meno basate sull'opinione che sui fatti. Non chiedere: "Qual è il tuo preferito?" ma "Quali sono le differenze operative tra?" Quindi non si ottengono risposte come "Preferisco la convalida fluente". ma invece le cose che in primo piano differiscono prima e presentano i risultati in secondo luogo.
ruffin

Risposte:


113

Preferisco la convalida fluida :

  1. Mi dà un controllo molto migliore delle mie regole di convalida
  2. Eseguire la convalida condizionale su proprietà diverse è molto più semplice rispetto alle annotazioni dei dati
  3. Separa la convalida dai miei modelli di visualizzazione
  4. Lo unit test è molto più semplice rispetto alle annotazioni dei dati
  5. Ha un eccellente supporto di convalida lato client per la maggior parte delle regole di convalida standard

6
Alcuni punti in più da questo articolo ( webdevbros.net/2010/12/03/… ): 1. Troppe annotazioni fanno sembrare brutto il tuo modello (simile al tuo punto 3) 2. Migliore riusabilità 3. Migliori prestazioni (senza Reflection )
SiberianGuy

2
@Idsa Il punto di performance sembra dubbio. La riflessione deve avvenire solo una volta per modello. Ciò presuppone una buona implementazione, non so come funzioni questa particolare implementazione.
CodesInChaos

@CodeInChaos, sembra che tu abbia ragione. Ma lo terrò lì perché non sono nemmeno sicuro (e abbastanza pigro da scoprire) come viene implementato.
SiberianGuy

2
Secondo FluentValidation ... è fantastico. Dal punto di vista del codice OCD, mi piace il fatto che rimuova la responsabilità della convalida dalle viste e gli dia le proprie classi. Ho provato xVal per un po 'di tempo in MVC1 ... Le annotazioni dei dati andavano bene per cose semplici, ma una volta che hai ottenuto più di una manciata di regole potresti a malapena dire cosa avrebbe dovuto rappresentare ViewModel.
Brandon Linton

@Darin come si passano i messaggi di errore nella vista? puoi fornire un esempio di come farlo?
Jaime Sangcap

32

Preferisco chiaramente le annotazioni dei dati perché ...

  1. tutte le regole di convalida possono essere configurate in un punto del codice (all'interno della classe di metadati del modello) e non è necessario che vengano ripetute altrove.
  2. c'è un eccellente supporto per la convalida lato client (di nuovo - senza ripetizione di regole di convalida!) quando si utilizzano attributi di annotazione dati .
  3. Gli attributi di annotazione dei dati possono essere testati per assicurarsi che siano presenti.
  4. ci sono simpatici attributi di convalida aggiuntivi creati dalla comunità (ad es . Estensioni di annotazioni dei dati ).

2
Penso che la maggior parte di queste proprietà possa essere ottenuta con una qualche forma di validazione fluente. Non so se la libreria nell'OP lo supporti, ma in linea di principio è possibile, e nemmeno molto difficile.
CodesInChaos

Qual è lo scopo di testare la presenza di attributi? Non è fondamentalmente ripetere le regole di convalida?
Sam

30
@ Sam: testando se le proprietà sono decorate con attributi di annotazione dati, non si verifica la funzionalità dell'attributo stesso; ti stai solo assicurando che sia lì. Devo dire che ora, due anni dopo, sono dalla parte di Darin e sono d'accordo con la sua risposta.
Marius Schulz

@ Sam, perché probabilmente vuoi sapere se qualcuno lo rimuove dal tuo modello.
Steve

3
Ottimo commento Marius. Peccato che la maggior parte dei tutorial EF ora mostri la convalida eseguita con le annotazioni dei dati. Inizialmente sono stato anche affascinato dalla semplicità delle annotazioni, ma subito dopo aver provato a implementare una regola di convalida personalizzata, sono passato subito al team Fluent Validation ... A proposito, peccato che Darin abbia smesso di pubblicare :( La maggior parte di i suoi commenti in StackOverflow sono
azzeccati
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.