Tengo dificultades para entender cómo debo diseñar el error al manejar partes de mi código. Hace poco hice una pregunta similar acerca de cómo debo ir sobre returning server error codes to the user, eg. 404 errors. Aprendí que debería manejar el error desde la parte actual de la aplicación; parece lo suficientemente simple.¿Cómo debo manejar los errores previstos? p.ej. "nombre de usuario ya existe"
Sin embargo, ¿qué debo hacer cuando no puedo manejar el error del enlace actual en la cadena? Por ejemplo, puedo tener una clase que se usa para administrar la autenticación. Uno de sus métodos podría ser createUser($username, $password)
. Editar: Este método devolverá una identificación de usuario o un objeto de usuario. Dentro de esa función, necesito determinar si el nombre de usuario ya existe. Si esto es cierto, ¿cómo debo alertar al código de llamada sobre esto? Devolver nulo en lugar de un objeto de usuario es una forma. ¿Pero cómo sé entonces qué causó el error?
¿Cómo debo manejar los errores de tal manera que el código de llamada pueda descubrir fácilmente qué causó el error? ¿Hay un patrón de diseño comúnmente utilizado para este tipo de situación?
Editar: Se me olvidó mencionar: Estoy usando PHP.
Resuelto: Mientras que muchas personas argumentan que las excepciones no deben utilizarse en esta situación, he llegado a la conclusión de que es la mejor solución.
En primer lugar, no existe una alternativa sencilla y elegante a las excepciones. (Reconozco que no es posible sin un sistema integrado en el lenguaje ... las excepciones ya están incorporadas.)
En segundo lugar, en respuesta a las "excepciones solo se deben usar para situaciones excepcionales, y este no es uno "argumento: "When I call getFoo(), I actually expect to get a Foo. If I don't get it, it's by definition an exceptional event." (a través, pkainulainen)
¿Podría ampliar lo que quiere decir con "establecer un objeto de error", por favor? ¡Gracias! –
De estos tres, las excepciones parecen casi hechas a medida para tratar con el tipo de escenarios descritos en la pregunta. Puede escoger y elegir cómo manejar cada evento excepcional según la clase y el mensaje de la excepción. – AndreiM
@tehblanx - Creo que no estoy de acuerdo. El 'createUser' debería devolver' true' en success y 'false' en caso contrario. Idealmente, todo esto se manejará en una clase y la clase misma puede manejar los problemas que surjan de un registro fallido. – thetaiko