Question

Je l'avoue:Je ne vous embêtez pas avec trop de manipulation d'exception.Je sais que je devrais en faire plus mais je ne peux jamais envelopper ma tête autour de par où commencer et où s'arrêter.Je ne suis pas paresseuse.Loin d'elle.C'est que je suis surmenée, à l'exception de la manipulation de l'ambivalence.Il semble juste qu'il semble y avoir un nombre infini de lieux, même dans la plus petite application où la gestion des exceptions peuvent être appliqués et il peut commencer à se sentir comme exagéré.

J'ai obtenu par avec attention les tests, la validation et la prière silencieuse, mais c'est une mauvaise programmation accident en attente de se produire.

Alors, quels sont vos exception de la manipulation de meilleures pratiques?En particulier, où sont les plus évidents de la critique des endroits où la gestion des exceptions devraient être appliquées et où sont les lieux où il doit être pris en compte?

Désolé pour le flou la question mais j'ai vraiment envie de fermer le livre sur ce, une fois pour toutes.

Était-ce utile?

La solution

Microsoft Modèles et Pratiques de l'équipe a fait un bon travail en intégrant les bonnes pratiques de gestion des exceptions dans la Bibliothèque d'Entreprise La Gestion Des Exceptions Bloc D'Application

Événement si ne pas utiliser de Bibliothèque d'Entreprise, je très vous recommandons de lire leur documentation.P&P de l'équipe décrit des scénarios courants et les meilleures pratiques pour la gestion des exceptions.

Pour commencer je vous recommande de lire les articles suivants:

ASP.NET des articles spécifiques:

Autres conseils

La règle d'or avec la gestion des exceptions est:

"Seul hic, ce que vous savez comment le gérer"

J'ai trop vu de blocs try-catch où les prises ne fait rien, mais relever de l'exception.Ce n'ajoute pas de valeur.Juste parce que vous appelez une méthode qui a le potentiel de générer une exception ne signifie pas que vous avez à traiter avec la possible exception dans le code appelant.Il est souvent tout à fait acceptable de laisser des exceptions propagée vers le haut de la pile des appels à un autre code qui ne sait plus quoi faire.Dans certains cas, il est valable pour laisser exceptions propagées tout le chemin jusqu'à la couche d'interface utilisateur de trouver et d'afficher le message à l'utilisateur.Il se pourrait qu'aucun code n'est le mieux placé pour savoir comment gérer la situation, et l'utilisateur doit décider du cours de l'action.

Je vous recommande de commencer par l'ajout d'une bonne page d'erreur qui intercepte toutes les exceptions et imprime un peu moins hostile message à l'utilisateur.Assurez-vous de consigner tous les détails de l'exception et de réviser cette.Permettre à l'utilisateur de savoir que vous avez fait cela, et de lui donner un lien vers une page qui va (probablement) de travail.

Maintenant, utilisez-le journal de détecter l'emplacement spécial de gestion des exceptions devraient être mis en place.Rappelez-vous qu'il n'est pas dans l'interception d'une exception, sauf si vous prévoyez de faire quelque chose avec elle.Si vous avez la page mentionnée ci-dessus, il n'y a aucune utilisation dans la capture de la base de données d'exceptions individuellement sur toutes les db des opérations, sauf si vous avez une manière bien particulière de récupérer à ce moment précis.

Souvenez-vous:La seule chose pire que de ne pas attraper les exceptions, est de les attraper et de ne pas de ne rien faire.Cela ne fera que masquer les vrais problèmes.

Peut-être plus sur la gestion des exceptions, en général, qu'ASP.NET spécifique mais:

  • Essayez d'attraper les exceptions à proximité la cause que possible de sorte que vous peut-enregistrement (log) information à propos de l'exception que possible.
  • Inclure une certaine forme de prises toutes, dernières station gestionnaire d'exception à l' les points d'entrée de votre programme.Dans ASP.NET cela pourrait être le Le niveau d'Application de gestionnaire d'erreur.
  • Si vous ne savez pas comment faire "correctement" gérer une exception laisser bouillonner à l'attraper tout gestionnaire où vous pouvez le traiter comme un "imprévu" l'exception".
  • Try***** méthodes .NET pour des choses comme l'accès à un De dictionnaire.Cela permet d'éviter les grands les problèmes de performance (à l'exception de la manipulation est relativement lente) si vous lancer plusieurs exceptions à-dire un de la boucle.
  • Ne pas utiliser des exceptions pour le contrôle normal de la logique de votre programme, par ex.de la sortie d'une boucle via une instruction throw.

Commencez avec un gestionnaire global d'exception tels que http://code.google.com/p/elmah/.

Alors la question se résume à ce genre de demande êtes-vous de l'écriture et de ce type d'expérience avez-vous besoin de fournir.Le plus riche de l'expérience de l'utilisateur la meilleure gestion de l'exception que vous aurez envie de fournir.

Par exemple, considérez un site d'hébergement photo qui a les quotas de disque, de la taille des fichiers des limites, limites de la dimension de l'image, etc.Pour chaque erreur, il vous suffit de retourner "Une erreur s'est produite.S'il vous plaît essayer à nouveau".Ou vous pourriez obtenir dans les détails de la gestion d'erreur:

  • "Votre fichier est plus grande.Maximum filesizes est de 5 mo."
  • "Votre image est pour les grands.Les dimensions maximales sont 1200x1200."
  • "Votre album est plein.Capacité de stockage maximale est de 1 go".
  • "Il y avait une erreur avec votre le téléchargement.Notre hampsters sont malheureux.Veuillez revenir plus tard."

etc.etc.

Il n'y a pas de taille unique pour la gestion des exceptions.

Bien au niveau de base, vous devriez être de la manipulation de la HttpApplication.Événement d'erreur dans le Global.asax fichier.Cela devrait enregistrer toute exception qui se produit à un seul endroit, donc vous pouvez passer en revue la trace de la pile de l'exception.

En dehors de ce niveau de base, vous devriez idéalement être la gestion des exceptions où vous savez que vous pouvez récupérer à partir d'eux - par exemple, si vous vous attendez à un fichier peut être verrouillé, la manipulation de la IOException et signale l'erreur à l'utilisateur serait une bonne idée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top