É uma boa prática implementar manipulação de exceção inútil, caso outra parte do código não seja codificada corretamente?
Exemplo básico
Simples, então não perco todo mundo :).
Digamos que estou escrevendo um aplicativo que exibirá as informações de uma pessoa (nome, endereço etc.), os dados sendo extraídos de um banco de dados. Digamos que sou eu quem está codificando a parte da interface do usuário e que alguém está escrevendo o código de consulta do banco de dados.
Agora imagine que as especificações do seu aplicativo digam que, se as informações da pessoa estiverem incompletas (digamos que o nome esteja ausente no banco de dados), a pessoa que codifica a consulta deve lidar com isso retornando "NA" para o campo ausente.
E se a consulta estiver mal codificada e não tratar desse caso? E se o cara que escreveu a consulta manipular um resultado incompleto e quando você tenta exibir as informações, tudo falha, porque seu código não está preparado para exibir itens vazios?
Este exemplo é muito básico. Acredito que a maioria de vocês dirá "não é problema seu, você não é responsável por esta falha". Mas ainda é sua parte do código que está travando.
Outro exemplo
Digamos que agora sou eu quem está escrevendo a consulta. As especificações não dizem o mesmo que acima, mas o sujeito que está escrevendo a consulta "inserir" deve garantir que todos os campos estejam completos ao adicionar uma pessoa ao banco de dados para evitar a inserção de informações incompletas. Devo proteger minha consulta "select" para garantir que eu forneça informações completas ao usuário da interface do usuário?
As questões
E se as especificações não disserem explicitamente "esse cara é o responsável por lidar com essa situação"? E se uma terceira pessoa implementa outra consulta (semelhante à primeira, mas em outro banco de dados) e usa seu código de interface do usuário para exibi-la, mas não lida com esse caso em seu código?
Devo fazer o que é necessário para evitar uma possível falha, mesmo que eu não deva lidar com o caso ruim?
Não estou procurando uma resposta como "(s) ele é o responsável pelo acidente", como não estou resolvendo um conflito aqui, gostaria de saber, devo proteger meu código contra situações que não são de minha responsabilidade lidar? Aqui, um simples "se vazio fizer alguma coisa" seria suficiente.
Em geral, essa pergunta aborda o tratamento de exceções redundantes. Estou perguntando, porque quando trabalho sozinho em um projeto, posso codificar 2 a 3 vezes uma exceção semelhante, em funções sucessivas, "apenas no caso" de fazer algo errado e permitir que um caso ruim ocorra.