2009-04-15 4 views
7

Sto provando a scegliere uno dei framework di convalida per un'applicazione principale, e mentre entrambe le opzioni sembrano allettanti, mi chiedevo se ci sono pro e contro specifici di cui dovrei essere a conoscenza prima di impegnarmi in uno o nell'altro.Quale framework di validazione scegliere: Spring Validation o Validation Application Block (Enterprise LIbrary 4.0)?

+0

Web o desktop? Stai usando altri blocchi entlib? Volete specificare l'architettura? – boj

+0

È per un'applicazione Web. Potrei usare altri blocchi entlib, come sicurezza e logging, che saranno richiesti nell'applicazione. Non userò comunque Unity, dato che quel bit sarà gestito da Spring.NET –

+1

Non ho esperienza con Spring.NET ma sono un grande fan dei blocchi EntLib. Dovresti leggere http://weblogs.asp.net/ricardoperes/archive/2009/03/11/asp-net-validation-with-the-enterprise-library-validation-block.aspx e http: //www.davidhayden .com/blog/dave/archive/2007/02/28/PropertyProx – boj

risposta

6

La convalida con gli attributi non è la soluzione migliore a mio avviso. Innanzitutto devi fare riferimento all'infrastruttura nel modello di dominio. In secondo luogo non hai alcuna possibilità di aggiungere la convalida alle classi compilate. Infine, non è possibile convalidare la logica complessa con gli attributi e si deve rendere il metodo Validate all'entità e questo sembra semplicemente imbarazzante.

A mio parere, la convalida deve essere separata per oggetto diverso. Ad esempio IValidator in cui è possibile definire la convalida come regole. L'utilizzo di framework come xVal consente di eseguire la convalida nel livello di presentazione con JavaScript.

Si consiglia di cercare xVal e FluentValidation for .NET. NHibernate Validator 1.2 alpha ha anche una sintassi fluente ed è integrato con xVal (non è sicuro di alpha, ma dovrebbe essere 1.0).

Enterprise Validation Block ha anche pochi lati negativi. Le proprietà della mia entità hanno finito per avere 3 file di attributi e hanno peggiorato la leggibilità. Anche provare ad aggiungere la convalida con gli operatori AND o OR è abbastanza doloroso.

+1

Il blocco applicazione di convalida non deve essere utilizzato con gli attributi. Contiene un approccio di convalida basato sulla configurazione. Leggi questo articolo: http://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=46 – Steven

+1

Mentre preferisco la convalida basata sulla configurazione sulla configurazione basata sugli attributi per la stessa ragione che descrive Marek, VAB 5.0 ti consente definire le convalide usando la tecnica della classe buddy che è stata introdotta da DataAnnotations. – Steven

+0

xVal è stato utilizzato con ASP.NET MVC 1.0 e attualmente deprecato –

3

Una cosa che ho trovato con i blocchi di Enterprise Library è che può forzare l'uso di altri blocchi che non si vogliono/hanno bisogno. Ad esempio, il Validation one potrebbe utilizzare il blocco di registrazione, ma tu eri soddisfatto del tuo sistema di registrazione. ora la tua app registra le cose in modi diversi. Detto questo, mi è piaciuto l'aspetto del blocco Validation nell'Ent Lib. Non ho ancora giocato con Spring.NET.

+0

Non ho mai avuto questo problema con il blocco dell'applicazione di convalida. Puoi indicare il codice o la posizione in cui VAB chiama il blocco dell'applicazione di registrazione? – Steven

+1

Ho dato un'occhiata più approfondita a questo, ma non ci sono chiamate dirette dagli assembly di convalida della libreria Enterprise a nessuno degli assembly di registrazione. Penso che la tua applicazione abbia usato direttamente la parte di registrazione. Nelle mie applicazioni pubblico solo gli assembly specifici del VAB. Per VAB 5.0 è necessario: 'Comune',' Validazione', 'ServiceLocation',' Unity', 'Unity.Configuration' e' Unity.Interception'. – Steven

+0

Questo potrebbe essere in una versione precedente. Quando penso di averlo visto, era la versione 2.0 della Enterprise Library. – SteveM