Sto scrivendo un webservice.In quale livello deve essere eseguita la validazione?
In genere l'input sarà un documento XML e l'output XML o JSON.
L'applicazione utilizza lo scalpiccio MVC, avendo diversi strati
- Controllers: Ricevi XML e fornire la risposta (XML/JSON)
- Servizio: logica di business, transazioni
- DAO: Interrogare l'origine dati (un Database o forse un altro servizio web)
La mia comprensione è che la convalida di base (ovvero XML contro XSD) dovrebbe essere eseguita il prima possibile sul livello Controller.
Dopo di che, ho ancora bisogno di eseguire la convalida in più, alcuni di tali convalide sono di base, ad esempio
- formato della data deve essere corretta
- nome utente non può superare i caratteri X (forse anche da svolgere sull'XSD?)
Per quanto ho capito, tali convalide di base dovrebbero essere eseguite quando si elimina l'XML in un oggetto Java. Che sarebbe anche happend nello strato di controllo (anche se la convalida si sarebbe fatto da parte dell'oggetto Java in cui l'XML è deserializzati in)
E infine io faccia più "complessi" convalide esempi
- la data non deve essere anteriore al 1950 (solo un esempio casuale)
- Se il valore a è maggiore di B, allora il valore C non deve superare D
Tali valiations "complessi" sembra essere di per candidato adatto per l'interfaccia javax.validation.Validator. E sembra anche che dovrebbero essere fatti nel livello Controller.
Le domande sono
- E` approccio corretto? Devo anche convalidare qualcosa su altri livelli?
- Sto aggiungendo troppa logica nei controller? Dovrei forse spostare qualche convalida sul livello di servizio in cui si trova la logica di business?
Per me, la cosiddetta convalida "complessa" sembra più una necessità aziendale e come tale dovrebbe essere applicata a livello di business logic. – mawia
@mawia Un buon punto, e grazie a dio ho citato la parola "complesso" :) –