Je suis coincé pour décider comment gérer les exceptions dans mon application.
La plupart de mes problèmes avec les exceptions proviennent 1) de l'accès aux données via un service distant ou 2) de la désérialisation d'un objet JSON. Malheureusement, je ne peux pas garantir le succès de l'une ou l'autre de ces tâches (connexion réseau coupée, objet JSON malformé qui échappe à mon contrôle).
Par conséquent, si je rencontre une exception, je l'attrape simplement dans la fonction et renvoie FALSE à l'appelant. Ma logique est que tout ce qui intéresse vraiment l'appelant est de savoir si la tâche a réussi, et non pourquoi elle n'a pas réussi.
Voici un exemple de code (en JAVA) d'une méthode typique)
public boolean doSomething(Object p_somthingToDoOn)
{
boolean result = false;
try{
// if dirty object then clean
doactualStuffOnObject(p_jsonObject);
//assume success (no exception thrown)
result = true;
}
catch(Exception Ex)
{
//don't care about exceptions
Ex.printStackTrace();
}
return result;
}
Je pense que cette approche est bonne, mais je suis vraiment curieux de savoir quelles sont les meilleures pratiques en matière de gestion des exceptions (dois-je vraiment faire bouillonner une exception tout au long de la pile d'appels ?)
En résumé des questions clés :
- Est-il possible de se contenter d'attraper les exceptions sans les faire apparaître sous forme de bulles ou de notifier formellement le système (via un journal ou une notification à l'utilisateur) ?
- Quelles sont les meilleures pratiques pour les exceptions qui n'entraînent pas la nécessité d'un bloc try/catch ?
Suivi/Modification
Merci pour tous les commentaires, j'ai trouvé d'excellentes sources sur la gestion des exceptions en ligne :
- Meilleures pratiques pour le traitement des exceptions | O'Reilly Media
- Meilleures pratiques de traitement des exceptions en .NET
- Meilleures pratiques : Gestion des exceptions (L'article pointe désormais vers la copie d'archive.org)
- Antipatterns de gestion des exceptions
Il semble que la gestion des exceptions soit une de ces choses qui varient en fonction du contexte. Mais le plus important, c'est qu'il faut être cohérent dans la façon dont on gère les exceptions dans un système.
En outre, faites attention à la pourriture du code par le biais d'un nombre excessif de try/catches ou en ne donnant pas à une exception le respect qui lui est dû (une exception avertit le système, qu'y a-t-il d'autre à avertir ?).
De plus, c'est un commentaire plutôt judicieux de la part de m3rLinEz .
J'ai tendance à être d'accord avec Anders Hejlsberg et vous que la plupart des appelants ne se que de savoir si l'opération est réussie ou non.
Ce commentaire soulève quelques questions auxquelles il faut réfléchir lorsqu'on traite des exceptions :
- Quel est l'intérêt de la levée de cette exception ?
- Comment faut-il s'y prendre ?
- L'appelant se soucie-t-il vraiment de l'exception ou simplement du fait que l'appel a réussi ?
- Est-ce que forcer un appelant à gérer une exception potentielle est gracieux ?
-
Êtes-vous respectueux des idomes de la langue ?
- Avez-vous vraiment besoin de renvoyer un indicateur de réussite comme un booléen ? Le retour d'un booléen (ou d'un int) est plus un état d'esprit C que Java (en Java, vous vous contenteriez de gérer l'exception).
- Suivez les constructions de gestion des erreurs associées à la langue :) !