¿Es una buena práctica usar excepciones y lanzar / atrapar excepciones en lugar de devolver 0 o 1 de las funciones y luego usar if / else para manejar los errores? Por lo tanto, es más fácil informar al usuario sobre el problema.
¡No no no!
No mezcle excepciones y errores. Las excepciones son, bueno, excepcionales. Los errores no son. Cuando le pide a un usuario que ingrese una cantidad de un producto, y el usuario ingresa "hola", es un error. No es una excepción: no hay nada excepcional al ver una entrada no válida del usuario. ¿Por qué no puede usar excepciones en casos no excepcionales, como al validar la entrada? Otras personas ya lo explicaron y mostraron una alternativa válida para la validación de entrada.
Esto también significa que al usuario no le importan sus excepciones , y mostrar las excepciones es hostil y peligroso . Por ejemplo, una excepción durante la ejecución de una consulta SQL a menudo revela la consulta en sí. ¿Estás seguro de que quieres correr el riesgo de mostrar ese mensaje a todos?
más de 1 cosa podría salir mal, como un problema de la base de datos, una entrada duplicada, un problema del servidor, etc. Cuando ocurre un problema durante el registro, el usuario debe saberlo.
Incorrecto. Como usuario, no necesito conocer los problemas de su base de datos, entradas duplicadas, etc. Realmente no me importan sus problemas. Lo que sí necesito saber es que ingresé un nombre de usuario que ya existe. Como ya se dijo, una entrada incorrecta de mi parte debe provocar un error, no una excepción.
¿Cómo generar esos errores? Depende del contexto. Para un nombre de usuario ya usado, me gustaría ver aparecer una pequeña bandera roja cerca del nombre de usuario, incluso antes de enviar el formulario, diciendo que el nombre de usuario ya está usado. Sin JavaScript, la misma bandera debe aparecer después del envío.

Para otros errores, mostraría una página completa con un error, o elegiría otra forma de informar al usuario que algo salió mal (por ejemplo, un mensaje que aparecerá y luego se desvanecerá en la parte superior de la página). La pregunta se relaciona más con la experiencia del usuario que con la programación.
Desde el punto de vista de los programadores, dependiendo del tipo de error, lo propagará de diferentes maneras. Por ejemplo, en el caso de un nombre de usuario ya tomado, una solicitud de AJAX http://example.com/?ajax=1&user-exists=John
devolverá un objeto JSON que indica:
- Que el usuario ya existe,
- El mensaje de error para mostrar al usuario.
El segundo punto es importante: desea asegurarse de que el mismo mensaje aparezca tanto al enviar el formulario con JavaScript deshabilitado como al escribir un nombre de usuario duplicado con JavaScript habilitado. ¡No desea duplicar el texto del mensaje de error en el código fuente del lado del servidor y en JavaScript!
Esta es en realidad la técnica utilizada por los sitios web de Stack Exhange. Por ejemplo, si trato de votar mi propia respuesta, la respuesta AJAX contiene el error para mostrar:
{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.",
"Refresh":false}
También puede elegir otro enfoque y preestablecer los errores en la página HTML antes de que se complete el formulario. Pros: no tiene que enviar el mensaje de error en la respuesta AJAX. Contras: ¿qué pasa con la accesibilidad? Intente navegar por la página sin CSS y verá aparecer todos los posibles errores.