Pérola: como dificultar o tratamento de erro de aplicações

Vamos dar uma olhada no método abaixo, que foi pego de uma situação real (mudei os nomes de variáveis para evitar que reclamem que o coloquei aqui). Nesta aplicação, há uma necessidade de sincronizar dados de usuários, buscando dados do sistema A e atualizando no sistema B.

public static void AtualizarUsuarios()
{
    try
    {
        using (BatchFacade batchFacade = new BatchFacade())
        {
            List<Usuario> usuariosSistemaA = batchFacade.ListarUsuariosSistemaA().GetRegistros<List<Usuario>>();
            List<Usuario> usuariosSistemaB = batchFacade.ListarUsuariosSistemaB().GetRegistros<List<Usuario>>();
            foreach (Usuario usuarioA in usuariosSistemaB)
            {
                Usuario usuarioB = usuariosSistemaA.Find(delegate(Usuario u)
                {
                    return u.SIAP.Equals(usuarioA.Codigo.ToString());
                });
                if (usuarioB != null && UsuarioModificado(usuarioA, ref usuarioB))
                {
                    batchFacade.AtualizarUsuario(usuarioB);
                }
            }
        }
    }
    catch
    {
        throw new ApplicationException("Falha ao atualizar os dados dos usuários");
    }
}

Esta aplicação possui um tratamento de erro genérico, que grava no eventlog todos os erros que ocorrem no sistema. Agora imaginem que ocorra um erro durante o processamento deste método: neste caso, a execução irá cair no block catch, e uma exception do tipo ApplicationException será lançada, com o texto "Falha ao atualizar os dados de usuários".
Agora imaginem vocês, com um erro em ambiente de produção, tendo apenas essa mensagem para descobrir o problema que está acontecendo. É nessas horas que a gente tem vontade de matar quem programa nas coxas, apenas se importando em entregar a funcionalidade e nem ligando para a pessoa que irá cuidar dessa tranqueira do sistema.

O simples fato de obter a exception original e passá-la como inner exception da ApplicationException que estamos lançando já ajuda, pois na rotina de tratamento de erros genérico podemos pegar os detalhes que ajudarão em muito identificar o problema. Neste caso, o problema era uma informação que vinha faltando no banco de dados.

[]'s

Comentários

Postagens mais visitadas deste blog

Trocando configurações padrão do Live TIM

Uma proposta de Clean Architecure com Modelo de Atores

Testes automatizados em sistemas autenticados com certificados digitais, usando Selenium e PhantomJS