Eu sempre me pego lutando com isso ... tentando encontrar o equilíbrio certo entre tentar / capturar e o código não se tornar essa bagunça obscena de guias, colchetes e exceções sendo lançadas de volta na pilha de chamadas como uma batata quente. Por exemplo, eu tenho um aplicativo que estou desenvolvendo agora que usa SQLite. Eu tenho uma interface de banco de dados que abstrai as chamadas SQLite e um modelo que aceita coisas para entrar / sair do banco de dados ... Portanto, se / quando ocorrer uma exceção SQLite, ela deverá ser lançada no modelo (que a chamou) ), que deve distribuí-lo a quem chamou o AddRecord / DeleteRecord / o que for ...
Sou fã de exceções, em vez de retornar códigos de erro, porque eles podem ser ignorados, esquecidos etc., enquanto uma exceção precisa ser tratada (concedida, eu poderia pegar e seguir imediatamente ...) certo de que deve haver uma maneira melhor do que o que estou acontecendo agora.
Edit: Eu deveria ter formulado isso um pouco diferente. Eu entendo re-jogar como tipos diferentes e tal, eu disse isso muito mal e isso é culpa minha. Minha pergunta é ... como é melhor manter o código limpo ao fazer isso? Começa a parecer extremamente confuso para mim depois de um tempo.