Pergunta

Admito-o:Que eu não perca tempo com excesso de manipulação de exceção.Eu sei que eu deveria fazer mais, mas eu nunca pode envolver minha cabeça em torno de por onde começar e onde parar.Eu não estou sendo preguiçoso.Longe disso.É que eu sou exagerada com a manipulação de exceção de ambivalência.Ele só parece que há um número aparentemente infinito de lugares no menor app onde a manipulação de exceção pode ser aplicado e pode começar a se sentir como um desperdício.

Eu comecei com o cuidado de testar, validar e silenciosa oração, mas esta é uma má programação acidente esperando para acontecer.

Então, quais são seus melhores práticas de manipulação de exceção?Em particular, onde estão os mais óbvia/locais críticos, onde a manipulação de exceção devem ser aplicados e de onde são os lugares onde ele deve ser considerado?

Desculpem a vaga a pergunta, mas eu realmente precisava para fechar o livro sobre isso de uma vez por todas.

Foi útil?

Solução

Microsoft Equipe de Práticas e padrões fez um bom trabalho, incorporando as melhores práticas de gerenciamento de exceção em Enterprise Library A Manipulação De Exceção De Aplicativo De Bloco De

O evento se não utilizar o Enterprise Library, eu altamente recomendamos que você leia a documentação.P&P de equipe descreve cenários comuns e melhores práticas para a manipulação de exceções.

Para começar recomendo a leitura dos seguintes artigos:

ASP.NET artigos específicos:

Outras dicas

A regra de ouro, com a manipulação de exceção é:

"Pegar somente o que você sabe como lidar"

Já vi muitos blocos try-catch, onde a captura não faz nada, mas relançar a exceção.Isso não agrega nenhum valor.Só porque você chamar um método que tem o potencial para lançar uma exceção não significa que você tem que lidar com a possível exceção no código de chamada.Muitas vezes é perfeitamente aceitável para permitir exceções propagar até a pilha de chamadas para algum outro código que não sabia o que fazer.Em alguns casos, é válida a permitir exceções propagar por todo o caminho até a camada de interface de usuário, em seguida, capturar e exibir a mensagem para o usuário.Pode ser que o código não está em melhor posição para saber como lidar com a situação e o usuário deve decidir o curso de ação.

Eu recomendo que você comece adicionando uma boa página de erro que captura todas as exceções e imprime um pouco menos hostil mensagem para o usuário.Certifique-se de registrar todos os detalhes disponíveis dos exceção e rever.Permitir que o usuário saiba que você tem feito isso, e dar-lhe um link para uma página que irá (provavelmente) de trabalho.

Agora, use esse log para detectar onde especiais de manipulação de exceção deve ser colocado no lugar.Lembre-se que não há utilização na captura de uma exceção, a menos que você planeja fazer algo com ele.Se você tiver a página acima no lugar, não há nenhum uso na captura de banco de dados exceções individualmente em todos os db de operações, a menos que você tenha alguns específicos de forma a recuperar em que ponto específico.

Lembre-se:A única coisa pior do que não pegar exceções, é captura-los e não fazer nada.Isso só vai esconder os problemas reais.

Pode ser mais sobre tratamento de exceção, em geral, que ASP.NET speific mas:

  • Tente pegar exceções tão perto a causa possível, para que você pode registro (log) do máximo de informação sobre a exceção possível.
  • Incluir alguma forma de pegar todos, última resort manipulador de exceção no pontos de entrada para o seu programa.No ASP.NET este poderia ser o O nível de aplicação de manipulador de erro.
  • Se você não sabe como "corretamente" manipular uma exceção deixe-a bolha até a pegar todos manipulador, onde você pode tratá-lo como um "inesperado" de exceção.
  • Usar o Try***** métodos .NET para coisas como aceder a uma Dicionário.Isso ajuda a evitar grandes problemas de desempenho (exceção o manuseio é relativamente lenta) se você lançar várias exceções em dizer loop.
  • Não use manipulação de exceção para controle normal lógica do seu programa de exemplosaindo de um loop através de uma instrução throw.

Comece com um manipulador de exceção global, tais como http://code.google.com/p/elmah/.

Então, a pergunta vem para baixo para o tipo de aplicação que você está escrevendo e que tipo de experiência de usuário, você precisa fornecer.Quanto mais rica a experiência do usuário a melhor manipulação de exceção, você pode fornecer.

Como um exemplo, considere uma foto de hospedagem de site que tenha as quotas de disco, filesize limites, a dimensão da imagem de limites, etc.Para cada erro, você pode simplesmente retornar "ocorreu Um erro.Por favor, tente novamente".Ou você poderia entrar detalhada de manipulação de erro:

  • "O arquivo é muito grande.Máximo tamanhos de ficheiros é de 5mb."
  • "Sua imagem é para grande.As dimensões máximas são 1200x1200."
  • "O álbum está cheio.Máxima capacidade de armazenamento é de 1 gb".
  • "Houve um erro com o seu upload.Nossa hampsters são infelizes.Por favor, volte mais tarde."

etc.etc.

Não há um tamanho único para o tratamento de exceção.

Bem, em nível muito básico que você deve ser o manuseio HttpApplication.Evento de erro no Global.asax arquivo.Este deve iniciar qualquer excepção ocorre para um único lugar, então você pode rever o rastreamento de pilha de exceção.

Para além deste nível básico você deve idealmente ser a manipulação de exceções, onde você sabe que você pode recuperá-los - por exemplo, se você espera que um arquivo pode ser bloqueado, então o tratamento IOException e relatar o erro para o usuário seria uma boa idéia.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top