Je ne peux pas décider comment gérer les exceptions dans mon application.
Beaucoup si mes problèmes avec des exceptions viennent 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 garantir le succès de l'une ou l'autre de ces tâches (coupure de la connexion réseau, objet JSON mal formé qui est hors de mon contrôle).
En conséquence, si je rencontre une exception, je l'attrape simplement dans la fonction et renvoie FALSE à l'appelant. Ma logique est que tout ce qui importe vraiment à l'appelant est de savoir si la tâche a réussi, pas 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 pour gérer les exceptions (devrais-je vraiment faire apparaître une exception tout au long d'une pile d'appels?).
En résumé des questions clés:
- Est-il acceptable de simplement attraper des exceptions mais de ne pas les faire apparaître 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 que tout nécessite un bloc try / catch?
Suivi / Modifier
Merci pour tous vos commentaires, nous avons trouvé d'excellentes sources sur la gestion des exceptions en ligne:
- Meilleures pratiques pour la gestion des exceptions | O'Reilly Media
- Bonnes pratiques de gestion des exceptions dans .NET
- Meilleures pratiques: gestion des exceptions (l'article pointe maintenant vers la copie d'archive.org)
- Antipatterns à gestion d'exception
Il semble que la gestion des exceptions est l'une de ces choses qui varient en fonction du contexte. Mais surtout, il faut être cohérent dans la façon dont ils gèrent les exceptions au sein d'un système.
De plus, faites attention à la pourriture du code via des essais / captures excessifs ou en ne respectant pas une exception (une exception avertit le système, que faut-il encore avertir?).
En outre, c'est un joli commentaire de choix de m3rLinEz .
J'ai tendance à être d'accord avec Anders Hejlsberg et vous que la plupart des appelants ne se soucient que de savoir si l'opération réussit ou non.
À partir de ce commentaire, il soulève quelques questions à prendre en compte lors du traitement des exceptions:
- À quel point cette exception est-elle lancée?
- Comment est-il logique de le gérer?
- L'appelant se soucie-t-il vraiment de l'exception ou se soucie-t-il simplement de la réussite de l'appel?
- Le fait de forcer un appelant à gérer une exception potentielle est-il gracieux?
- Êtes-vous respectueux des idomes de la langue?
- Avez-vous vraiment besoin de renvoyer un indicateur de succès comme booléen? Renvoyer un booléen (ou un int) est plus un état d'esprit C qu'un Java (en Java, vous ne feriez que gérer l'exception).
- Suivez les constructions de gestion des erreurs associées à la langue :)!