Tratamento estruturado de exceptions¶
Exceptions críticas¶
O mecanismo de gerenciamento de exceptions é um recurso nativo no runtime do .net. É uma das estratégias fundamentais do runtime para garantir a própria estabilidade. Perceba que estamos nos referindo à estabilidade do próprio runtime, não necessariamente a estabilidade do nosso "software em desenvolvimento" que pode ser simplesmente despejado sem cerimônias, em caso de falhas críticas ou não gerenciadas pelo nosso software.
Um dos exemplos mais icônicos de falha crítica é o StackoverflowException (Sim, o nome do site vem daí mesmo!). Por questões de design da plataforma, esta é uma das exceptions sistêmicas que o nosso software não é capaz de gerenciar!
Em sessões de depuração, o Visual Studio é capaz de alertar a ocorrência de uma exception do tipo StackOverflow. No entanto, isso deve unicamente ao fato de que o Visual Studio é um software monitorando outro software. O software monitorado (o nosso "software em desenvolvimento") a esta altura já se encontra num estado irrecuperável.
Fora de sessões gerenciadas pelo Visual Studio, mesmo quando se recebe uma notificação de exception através do evento , o resultado é o mesmo e o nosso software também já se encontra em fase de despejo da memória do sistema.
Existem algumas outras exceptions que decorrem de falhas catastróficas e sobre as quais pouco se pode fazer. Como exemplos: Out Of Memory Exception, Thread Abort Exception, que é possível interceptar, mas tem um comportamento estranho, SEHExceptions, quando se está fazendo interface com código nativo.
Para as demais exceptions - e são muitas - é possível fazer um tratamento eficaz, bem como um encaminhamento útil para o usuário final - quando necessário.
Exceptions transitórias¶
São alguns exemplos de falhas transitórias:
- Provedores de serviços e recursos momentaneamente indisponíveis
- Bloqueio momentâneo de recurso ... bloqueável
- Falha momentânea durante a leitura de uma ou mais cadeias de dados.
Exceptions regulares¶
!TODO
Catálogo local de Mensagens¶
!TODO
Try, Finally, Catch¶
!TODO
Catch e Catch Filter¶
!TODO
A poderosa cláusula finally¶
!TODO
Resolvendo exceptions ocorridas em camadas mais profundas do software¶
!TODO
Expondo exceptions - Throw e Rethrow¶
!TODO
Expondo exceptions - InProcess¶
!TODO
Expondo exceptions - OutOfProcess - Aspnet (Mvc, SOAP, WCF, REST)¶
!TODO
Além de um modelo de classe adequado para suportar algumas das opções acima, sugere-se uma abordagem combinada combinada de Modelo de Erros, Catálogo de Erros e a adoção de um Factory para Exception.