Is it good practice to use exceptions and throw/catch exceptions rather than returning 0 or 1 from functions and then using if/else to handle the errors. Thus, making it easier to inform the user about the issue.
No, no, no!
Non mescolare le eccezioni e gli errori. Le eccezioni sono, beh, eccezionali. Gli errori non lo sono. Quando chiedi a un utente di immettere una quantità di un prodotto e l'utente inserisce "Ciao", si tratta di un errore. Non è un'eccezione: non c'è nulla di eccezionale nel vedere un input non valido da parte dell'utente. Perché non puoi utilizzare le eccezioni in casi non eccezionali, come quando convalida l'input? Altre persone l'hanno già spiegato e hanno mostrato un'alternativa valida per la convalida dell'input.
Questo significa anche che l'utente non si preoccupa delle eccezioni e mostrare le eccezioni è sia ostile che pericoloso . Ad esempio, un'eccezione durante l'esecuzione di una query SQL rivela spesso la query stessa. Sei sicuro di voler rischiare di mostrare questo messaggio a tutti?
more than 1 thing could go wrong, such as a database issue, a duplicate entry, a server issue, etc. When an issue happens during registration the user needs to know about it.
sbagliato. Come utente, non ho bisogno di conoscere i tuoi problemi di database, le voci duplicate, ecc. Non mi preoccupo veramente dei tuoi problemi. Cosa io faccio è necessario sapere che ho inserito un nome utente che esiste già. Come già detto, un input sbagliato da parte mia deve attivare un errore, non un'eccezione.
Come generare quegli errori? Dipende dal contesto. Per un nome utente già utilizzato, mi piacerebbe vedere una piccola bandiera rossa che appare vicino al nome utente, prima ancora di inviare il modulo, dicendo che il nome utente è già utilizzato. Senza JavaScript, lo stesso flag deve apparire dopo l'invio.
Peraltrierrori,visualizzeraiunapaginainteraconunerroreoscegliunaltromodoperinformarel'utentechequalcosaèandatostorto(adesempiounmessaggiocheapparirà,quindisvanirànellapartesuperioredellapagina).Ladomandaèquindicorrelatapiùa esperienza utente che alla programmazione.
Dal punto di vista dei programmatori, a seconda del tipo di errore, lo si propagherà in modi diversi. Ad esempio, in caso di un nome utente già utilizzato, una richiesta AJAX a http://example.com/?ajax=1&user-exists=John
restituirà un oggetto JSON che indica:
- Che l'utente esiste già,
- Il messaggio di errore da mostrare all'utente.
Il secondo punto è importante: vuoi essere sicuro che lo stesso messaggio venga visualizzato sia quando invii il modulo con JavaScript disabilitato sia quando digiti un nome utente duplicato con JavaScript abilitato. Non vuoi duplicare il testo del messaggio di errore nel codice sorgente lato server e in JavaScript!
Questa è in realtà la tecnica utilizzata dai siti Web di Stack Exhange. Ad esempio, se provo ad aggiornare la mia risposta, la risposta AJAX contiene l'errore da visualizzare:
{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.",
"Refresh":false}
Puoi anche scegliere un altro approccio e preimpostare gli errori nella pagina HTML prima che il modulo sia riempito. Pro: non è necessario inviare il messaggio di errore nella risposta AJAX. Contro: che dire dell'accessibilità? Prova a sfogliare la pagina senza CSS e vedrai apparire tutti gli errori possibili.