He estado leyendo el consejo sobre esta pregunta sobre cómo se debe tratar una excepción lo más cerca posible de donde se plantea.
Mi dilema sobre la mejor práctica es si uno debería usar un try / catch / finalmente para devolver una enumeración (o un int que representa un valor, 0 para error, 1 para aceptar, 2 para advertencia, etc., según el caso) para que una respuesta siempre está en orden, o ¿debería uno dejar pasar la excepción para que la parte que llama se ocupe de ella?
De lo que puedo deducir, esto puede ser diferente según el caso, por lo que el consejo original parece extraño.
Por ejemplo, en un servicio web, siempre querrá devolver un estado, por lo que cualquier excepción debe tratarse en el acto, pero digamos que dentro de una función que publica / obtiene algunos datos a través de http, desearía que excepción (por ejemplo, en el caso del 404) para pasar al que lo disparó. Si no lo hace, tendría que crear alguna forma de informar a la parte que llama de la calidad del resultado (error: 404), así como el resultado en sí.
Aunque es posible intentar atrapar la excepción 404 dentro de la función auxiliar que obtiene / publica los datos, ¿debería? ¿Soy solo yo el que usa una letra pequeña para denotar estados en el programa (y los documenta adecuadamente, por supuesto), y luego uso esta información para fines de validación de cordura (todo está bien / manejo de errores) afuera?
Actualización: esperaba una excepción fatal / no fatal para la clasificación principal, pero no quería incluir esto para no perjudicar las respuestas. Permítanme aclarar de qué se trata la pregunta: manejar las excepciones lanzadas, no lanzar excepciones. Cuál es el efecto deseado: detecta un error e intenta recuperarte de él. Si la recuperación no es posible, proporcione los comentarios más significativos.
Nuevamente, con el ejemplo http get / post, la pregunta es, ¿debería proporcionar un nuevo objeto que describa lo que le sucedió a la persona que llamó originalmente? Si este asistente estuviera en una biblioteca que está utilizando, ¿esperaría que le proporcionara un código de estado para la operación, o lo incluiría en un bloque try-catch? Si lo está diseñando , ¿proporcionaría un código de estado o lanzaría una excepción y dejaría que el nivel superior lo traduzca a un código / mensaje de estado?
Sinopsis: ¿Cómo eliges si un código en lugar de producir una excepción, devuelve un código de estado junto con cualquier resultado que pueda producir?