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?
Répondre
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.
Le simple fait d'ajouter une tentative d'essai ne résout pas le problème. Ce sujet est trop gros pour être traité comme une question. Vous devez lire.
http://msdn.microsoft.com/en-us/library/8ey5ey87%28VS.71%29.aspx
http://www.codeproject.com/KB/architecture/exceptionbestpractices.aspx
également FXCop et VS Team System vous avertit sur certains problèmes de conception.
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.
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.
http://msdn.microsoft.com/en-us/library/ff664698(v=PandP.50).aspx
Jetez un coup d'Exception de Microsoft Handling Application Block. Il a une courbe d'apprentissage initiale, mais c'est une bonne chose une fois que vous l'avez compris. Pouvez-vous publier un exemple de code avec des détails?
- 1. Le moyen le plus élégant de morphiser cette séquence
- 2. Le moyen le plus élégant de couper une ligne?
- 3. Vous cherchez le répartiteur de code le plus élégant
- 4. Le moyen le plus élégant d'obtenir un élément?
- 5. SQL Update - Existe-t-il un moyen plus élégant et plus efficace de le faire?
- 6. Existe-t-il un moyen plus élégant de convertir un document XML en chaîne en Java que ce code?
- 7. jQuery: Y a-t-il un moyen de rendre cela plus court et plus élégant?
- 8. Quel est le moyen le plus efficace de gérer un grand nombre de lignes dans OpenGL?
- 9. Comment rendre ce code répété plus élégant?
- 10. Conseils pour un code plus élégant avec des monades?
- 11. Un ListView plus élégant requery
- 12. Plus élégant SQL?
- 13. Le moyen le plus élégant de vérifier l'égalité dans la taille des sous-réseaux dans un tableau multidimensionnel?
- 14. Quel est le moyen de gérer les erreurs et de renvoyer JSON?
- 15. Le moyen le plus élégant d'obtenir l'élément de tableau par position?
- 16. gérer les erreurs de contrainte mysql
- 17. Dans WPF utilisant un ListView, existe-t-il un moyen élégant de redimensionner automatiquement les éléments?
- 18. Tout moyen de détecter les erreurs de nom de fichier sensibles à la casse?
- 19. Comment gérer les erreurs de jetons?
- 20. Meilleure façon de gérer les erreurs
- 21. Comment gérer les erreurs dans Messaging.sendEmail()?
- 22. Comment gérer l'incapacité de casser les erreurs de syntaxe dans un analyseur de descente récursif
- 23. Comment gérer les erreurs de CLLocationManager?
- 24. Gérer les erreurs de liaison de données dans ASP.net
- 25. Existe-t-il un moyen simple et élégant de rendre ICollection plus fluide en C#?
- 26. Quel est le meilleur moyen de gérer un formulaire avec plus de 100 champs d'entrée?
- 27. Quel est le moyen le plus efficace de gérer les rejets "hg import"?
- 28. Existe-t-il un moyen d'intercepter les erreurs de compilation dans toutes les configurations de construction?
- 29. Quel est le moyen le plus efficace de gérer une session expirée avec ASP.NET 2.0
- 30. Le meilleur moyen de tester le code compilé pour retourner la sortie/les erreurs attendues
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
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
Assez vague ... un exemple serait bénéfique ... alors quelqu'un peut donner un aperçu –