Quand utiliser une exception définie par l'utilisateur et quelques bons exemples / les meilleures pratiques?

StackOverflow https://stackoverflow.com/questions/2600607

Question

Je suppose que la plupart des exceptions définies par l'utilisateur sont des exceptions au niveau logique d'affaires, mais ce sont quelques bonnes raisons d'utiliser une exception définie par l'utilisateur et ce sont quelques bons exemples?

est un avantage que d'exception définie par l'utilisateur que vous pouvez définir un message cohérent d'erreur?

Quelle logique peut être écrit à l'intérieur des exceptions pour les rendre vraiment plus utile?

Après tout, vous ne pouvez pas simplement faire: throw new Exception("Some Error Message");

Était-ce utile?

La solution

Avoir des exceptions définies par l'utilisateur est utile car il vous permet de gérer différents types d'erreurs de manière spécifique. Pourquoi ne définit .NET tant de différents types d'exceptions si elles pouvaient simplement jeter toutes les exceptions que System.Exception avec un message texte différent? La raison pour laquelle il existe différents types d'exceptions dans .NET est que vous pouvez attraper différents types d'erreurs et de les gérer différemment. C'est la même raison pour laquelle vous définir vos propres exceptions utilisateur - de sorte que vous pouvez fournir une réponse différente en fonction du type d'exception qui a eu lieu.

Vous pouvez également créer des exceptions définies par l'utilisateur qui incluent des données supplémentaires. Par exemple, vous pouvez définir un niveau de gravité à partir d'une ENUM, un code d'erreur entier ou toute autre chose qui pourrait être utile au programme appelant à identifier ce qui a mal tourné. Quant à la logique d'inclure dans les exceptions, j'essaie généralement juste de signaler ce qui se passait mal et laisser la logique (ce qu'il faut faire l'erreur) au programme appelant. Dans certains cas, j'ai le code d'exception écrire automatiquement l'erreur dans un fichier journal si elle a dépassé un certain niveau de gravité (par exemple les avertissements sont jetés, mais uniquement les erreurs critiques sont écrites dans le fichier journal).

Autres conseils

Vous devez créer très peu d'exceptions définies par l'utilisateur. Ils ne devraient être utilisés que si quelqu'un va attraper l'exception et faire quelque chose de spécifique avec elle. Si jeter votre exception au lieu de InvalidOperationException ne va pas faire autrement se comportent de code, puis jeter InvalidOperationException.

Il y a beaucoup d'exceptions déjà dans le cadre .NET, que vous devriez utiliser si vous pouvez en trouver un qui pourrait être utilisé pour votre situation exceptionnelle.

Par exemple, dans mes classes de configuration (qui sont normalement wrappers autour du ConfigurationManager) Je jette ConfigurationErrorsException quand jamais une valeur ne peut pas être analysée correctement.

Lors de l'analyse des valeurs personnalisées à partir du texte ou autre chose qui nécessite un format specfic et l'analyse syntaxique échoue, je jette un FormatException

Cependant, si mon objet BankAccount n'a pas assez d'argent pour moi de me retirer £ 10 alors je vais écrire et jette InsufficentFundsException parce qu'alors cette façon, je peux gérer ce cas d'erreur spécifique, si elle se produit jamais.

Espérons que cela (un peu) aide.

Non, ils ne sont pas seulement pour les messages. Vous pouvez rechercher les définis par l'utilisateur dans la liste d'exception d'un bloc catch.

catch(UserDefinedException){}
catch(Exception){}

Vous pouvez utiliser les exceptions utilisateur chaque fois que vous voulez chercher quelque chose de spécifique qui se produit. Peut-être un ID client est hors d'une plage spécifiée et que vous voulez chercher que spécifiquement. Au lieu d'avoir à analyser le message d'erreur (qui peut être une douleur, et est sujette à des erreurs, comme si le message change plus tard sur la route), vous avez une exception que vous utilisez et vous savez que quelque part ailleurs dans le code est dit spécifiquement vous « Hey cela est arrivé. vous devez être au courant. »

exceptions définies par l'utilisateur peuvent être utilisés dans un composant pour permettre aux consommateurs de la composante la possibilité de les attraper avec un niveau de granularité plus alors le bloc catch (Exception). Cela fournira le consommateur composant avec la possibilité d'effectuer différentes tâches sur la base desquelles exception a été levée. exceptions définies par l'utilisateur ne doivent être vraiment créés quand il y a une réelle attente que les consommateurs les utiliser pour se différencier de cette façon.

Vous pouvez également ajouter des propriétés pour stocker les méta-données supplémentaires avec une exception définie par l'utilisateur, comme un code d'erreur (par exemple lors de l'appel d'une API non géré). Ceci est plus convivial que de simplement mettre des choses dans la propriété des données de l'objet d'exception.

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