Eu tenho lido os conselhos sobre esta questão sobre como uma exceção deve ser tratada o mais próximo possível de onde é levantada.
Meu dilema sobre a melhor prática é se deve-se usar um try / catch / finalmente para retornar uma enumeração (ou um int que represente um valor, 0 para erro, 1 para ok, 2 para aviso etc., dependendo do caso), para que uma resposta está sempre em ordem ou deve-se deixar passar a exceção para que a parte que está chamando lide com ela?
Pelo que pude entender, isso pode ser diferente dependendo do caso, então o conselho original parece estranho.
Por exemplo, em um serviço da web, você sempre desejaria retornar um estado, é claro, portanto, qualquer exceção deve ser tratada no local, mas digamos que dentro de uma função que publique / obtenha alguns dados via http, você deseje o exceção (por exemplo, no caso de 404), apenas passar para o que a acionou. Caso contrário, seria necessário criar uma maneira de informar a parte que chama da qualidade do resultado (erro: 404), bem como o próprio resultado.
Embora seja possível tentar capturar a exceção 404 dentro da função auxiliar que obtém / publica os dados, você deveria? É apenas eu que uso um smallint para denotar estados no programa (e documentá-los adequadamente, é claro) e depois utilizo essas informações para fins de validação de sanidade (tudo ok / tratamento de erros) fora?
Atualização: Eu esperava uma exceção fatal / não fatal para a classificação principal, mas não quis incluí-la para não prejudicar as respostas. Deixe-me esclarecer sobre o que é a pergunta: Manipulando as exceções lançadas, não lançando exceções. Qual é o efeito desejado: detecte um erro e tente se recuperar dele. Se a recuperação não for possível, forneça o feedback mais significativo.
Novamente, com o exemplo http get / post, a pergunta é: você deve fornecer um novo objeto que descreva o que aconteceu com o chamador original? Se esse auxiliar estivesse em uma biblioteca que você está usando, esperaria que ele fornecesse um código de status para a operação ou o incluiria em um bloco try-catch? Se você o estiver projetando , você forneceria um código de status ou lançaria uma exceção e deixaria o nível superior convertê-lo em um código / mensagem de status?
Sinopse: Como você escolhe se um pedaço de código, em vez de produzir uma exceção, retorna um código de status junto com os resultados que ele pode produzir?