2010-11-18 1 views
5

Je me suis retrouvé à faire trop de gestion des erreurs avec les instructions try \ catch et à obtenir mon code moche avec ça. Vous avez une technique ou un cadre pour rendre cela plus élégant? (Dans C# windows forms ou asp.net).Existe-t-il un moyen plus élégant de gérer les erreurs que de répartir try/catch dans tout le code de l'application?

+0

Nous avons besoin de savoir quel problème vous essayez de résoudre, et dire simplement que quelque chose est "inélégant" ne suffit pas pour décrire un problème. – Oded

+0

J'ai rencontré le même problème sur une application sur laquelle je travaillais, je n'ai pas enquêté sur d'autres moyens, j'ai simplement mis un tas d'essais ... mais j'imagine que vous pouvez faire un essai et tous les sous-routines sauvegarder jusqu'à ce que je pense .... donc si vous avez beaucoup d'appels de fonction, vous pourriez ne pas avoir à le mettre dans chaque fonction, mais juste au niveau élevé – onaclov2000

+1

Assez vague ... un exemple serait bénéfique ... alors quelqu'un peut donner un aperçu –

Répondre

6

Vous devez vous familiariser avec la gestion des exceptions structurées. Si vous utilisez autant de gestionnaires d'exceptions que cela en a l'air, vous vous trompez.

La gestion des exceptions ne ressemble pas à la vérification des valeurs de retour. Vous êtes censé gérer certaines exceptions dans des endroits clés limités dans votre code, pas partout. Rappelez-vous que les exceptions "éclatent" la pile des appels!

Voici un article good and well-reviewed CodeProjec t sur les meilleures pratiques d'exception.

1

La terre de Java avait à peu près le même problème. Vous regardez juste la méthode et vous ne pouvez pas, à première vue, comprendre ce qu'elle fait, parce que tout ce que vous voyez est essayer/attraper des blocs. Prenez une méthode 30-40 lignes et jetez toutes les instructions try et attraper les blocs et vous pourriez vous retrouver avec 5-6 lignes de pure logique de l'application. Ce n'est pas un gros problème avec C# car il a des exceptions non contrôlées, mais il devient vraiment moche dans le code Java. La chose amusante est que les blocs try/catch étaient destinés à résoudre le même problème en premier lieu. À l'époque, il était causé par la folie errno/errstr. Ce que font généralement les développeurs Java est basé sur la façon dont vous gérez généralement les exceptions. La plupart du temps, vous ne pouvez vraiment rien faire pour corriger le problème. Vous venez d'informer l'utilisateur que tout ce qu'il essayait de faire ne fonctionnait pas, de remettre l'application dans un certain état et peut-être de se connecter et d'exception avec stacktrace complet pour enregistrer le fichier. Puisque vous gérez toutes les exceptions comme celle-ci, la solution consiste à avoir un gestionnaire d'exceptions attrape-tout, qui se trouve au-dessus de la pile d'applications et récupère toutes les exceptions qui sont levées et propagées dans la pile. Avec ASP.NET, vous pouvez utiliser quelque chose comme ceci:

http://www.developer.com/net/asp/article.php/961301/Global-Exception-Handling-with-ASPNET.htm

En même temps, vous êtes libre de passer outre ce gestionnaire global en plaçant bloc try/catch dans votre code, où vous vous sentez quelque chose peut être fait, pour corriger le problème.

0

Une telle dépendance à la gestion des exceptions (dans n'importe quel langage) suggère que le mécanisme est mal utilisé. J'ai toujours compris que la gestion des exceptions était conçue pour piéger l'événement vraiment exceptionnel et imprévisible. Il n'est pas conçu pour gérer (par exemple) une entrée de données invalide par un utilisateur - c'est un fonctionnement normal et votre code de conception et d'application doit traiter un tel traitement normal.

Questions connexes