È buona norma utilizzare le eccezioni e generare / intercettare le eccezioni anziché restituire 0 o 1 dalle funzioni e quindi utilizzare if / else per gestire gli errori. Pertanto, rendendo più semplice informare l'utente del problema.
No, no, no!
Non mescolare eccezioni ed errori. Le eccezioni sono, beh, eccezionali. Gli errori no. Quando chiedi a un utente di inserire una quantità di un prodotto e l'utente inserisce "ciao", si tratta di un errore. Non fa eccezione: non c'è niente di eccezionale nel vedere un input non valido da parte dell'utente. Perché non è possibile utilizzare le eccezioni in casi non eccezionali, come quando si convalida l'input? Altre persone lo hanno già spiegato e hanno mostrato una valida alternativa per la convalida dell'input.
Ciò significa anche che l'utente non si preoccupa delle tue 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 correre il rischio di mostrare questo messaggio a tutti?
più di 1 cosa potrebbe andare storta, ad esempio un problema di database, una voce duplicata, un problema del server, ecc. Quando si verifica un problema durante la registrazione, l'utente deve conoscerlo.
Sbagliato. Come utente, non ho bisogno di conoscere i tuoi problemi di database, voci duplicate, ecc. Non mi interessa davvero i tuoi problemi. Quello che faccio c'è da sapere è che ho inserito un nome utente già esistenti. Come già detto, un mio input errato deve innescare un errore, non un'eccezione.
Come produrre quegli errori? Dipende dal contesto. Per un nome utente già utilizzato, vorrei vedere una piccola bandiera rossa che appare accanto 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.
Per altri errori, visualizzerai un'intera pagina con un errore o scegli un altro modo per informare l'utente che qualcosa è andato storto (ad esempio un messaggio che apparirà, quindi svanire nella parte superiore della pagina). La domanda è quindi legata più all'esperienza dell'utente che alla programmazione.
Dal punto di vista dei programmatori, a seconda del tipo di errore, lo propagherai in diversi modi. Ad esempio, nel caso di un nome utente già utilizzato, una richiesta AJAX 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 compaia 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 sul lato server e in JavaScript!
Questa è in realtà la tecnica utilizzata dai siti Web Stack Exhange. Ad esempio, se provo a votare 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 compilato. 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 i possibili errori.