Giustifica programmaticamente assicurando che le convalide di frontend e backend siano sincronizzate

4

Al giorno d'oggi, al pari di molte applicazioni web ricche basate su Javascript, ho implementato alcune complicate regole di convalida sul front-end. Le stesse regole sono presumibilmente ripetute esattamente sul backend Java ma trovo sempre piccole deviazioni.

Come credente del principio DRY, penso che si dovrebbe fare qualcosa per sistematicamente sistemarlo. Idealmente entrambi i lati dovrebbero eseguire lo stesso codice e utilizzare le stesse regole, ma poiché l'esecuzione di JavaScript sul back-end non è consentita, posso solo sperare di riutilizzare alcune regole di convalida metatefatto. Fortunatamente, ho trovato alcune librerie su GitHub che possono farlo per la convalida basata su annotazioni JSR-303. Tuttavia, è ancora necessaria molta riscrittura e refactoring.

D'altra parte, il numero di regole è limitato (< 80 in totale) e il codice corrente è chiaro e semplice da comprendere (solo un gruppo di istruzioni if ). L'utilizzo di un framework di convalida richiederebbe che tutti i validatori personalizzati fossero avvolti e nascosti dietro metadati generati non immediatamente visibili durante lo sviluppo, quindi carichi di ulteriore curva di apprendimento.

Sembra che il mio obiettivo di migliorare il codice danneggerà davvero la manutenibilità. Qual è l'esperienza delle persone su questo?

    
posta billc.cn 29.09.2015 - 13:13
fonte

2 risposte

2

È possibile utilizzare un DSL basato su regole per specificare le regole di convalida utilizzate sia dal lato anteriore che da quello posteriore. Questo però richiede codice su entrambe le estremità anteriore e posteriore per leggere e implementare tali regole di convalida. Ciò porta ai problemi che la regola della validazione che legge e che implementa il codice deve essere scritta due volte. Questo può ancora portare a incongruenze e aggiunge alle dimensioni del tuo codice base, aumentandone la complessità.

Il modo per ridurre la complessità del codice ei rischi di un controllo delle regole incoerente è di scaricare tutta la convalida sul lato server. Il codice JavaScript quindi utilizza le chiamate AJAX per richiedere al back-end di convalidare l'input. Il front end non sa nulla delle regole di validazione, viene semplicemente detto se l'input è valido o meno.

    
risposta data 29.09.2015 - 14:20
fonte
3

Nella mia esperienza, le convalide su client e server spesso differiscono per una buona ragione.

Generalmente un lato server, il processo di basso livello genera un'eccezione, con forse una breve descrizione, forse un numero di errore. Questo è pensato per la registrazione in un log degli errori piuttosto che per mostrare all'utente finale.

Mentre un errore lato client viene elaborato prima di effettuare una chiamata e presenterà all'utente un messaggio di errore descrittivo, nella propria lingua, forse con gli elementi dell'interfaccia utente che evidenziano il problema.

questo porta a una differenza sia nel modo in cui la convalida viene eseguita, sia nel messaggio di errore restituito e otfen la logica effettiva della convalida.

per esempio prendi il mio esempio preferito, la forma lunga presentata come un insieme di formulari "wizard" con la convalida ad ogni passaggio. La convalida dell'input dell'utente verrà suddivisa e completata in ogni fase. Dove la logica lato server si aspetta tutti i dati contemporaneamente.

    
risposta data 29.09.2015 - 15:24
fonte

Leggi altre domande sui tag