J'ai lu les conseils sur cette question sur la manière de traiter une exception aussi près que possible de son origine.
Mon dilemme sur la meilleure pratique est de savoir si l'on doit utiliser un try / catch / enfin pour retourner une énumération (ou un int qui représente une valeur, 0 pour l'erreur, 1 pour ok, 2 pour l'avertissement, etc., selon le cas) afin que une réponse est toujours en ordre, ou faut-il laisser passer l'exception pour que la partie appelante s'en occupe?
D'après ce que je peux comprendre, cela pourrait être différent selon le cas, donc le conseil d'origine semble étrange.
Par exemple, sur un service Web, vous voudrez toujours retourner un état bien sûr, donc toute exception doit être traitée sur place, mais disons à l'intérieur d'une fonction qui publie / obtient des données via http, vous voudriez que le exception (par exemple dans le cas de 404) pour simplement passer à celui qui l'a tiré. Si vous ne le faites pas, vous devrez créer un moyen d'informer la partie appelante de la qualité du résultat (erreur: 404), ainsi que du résultat lui-même.
Bien qu'il soit possible d'essayer d'attraper l'exception 404 à l'intérieur de la fonction d'assistance qui obtient / publie les données, devriez-vous? Est-ce seulement moi qui utilise un petit entier pour désigner les états dans le programme (et les documenter de manière appropriée bien sûr), puis utiliser ces informations à des fins de validation de bon sens (tout va bien / gestion des erreurs) à l'extérieur?
Mise à jour: je m'attendais à une exception fatale / non fatale pour la classification principale, mais je ne voulais pas l'inclure afin de ne pas nuire aux réponses. Permettez-moi de clarifier la question: gérer les exceptions levées, et non lever des exceptions. L'effet souhaité: détectez une erreur et essayez de la récupérer. Si la récupération n'est pas possible, fournissez les commentaires les plus significatifs.
Encore une fois, avec l'exemple http get / post, la question est, devez-vous fournir un nouvel objet qui décrit ce qui est arrivé à l'appelant d'origine? Si cet assistant était dans une bibliothèque que vous utilisez, vous attendriez-vous à ce qu'il vous fournisse un code d'état pour l'opération, ou l'inclueriez-vous dans un bloc try-catch? Si vous le concevez , fourniriez-vous un code d'état ou lèveriez-vous une exception et laisser le niveau supérieur le traduire en code / message d'état à la place?
Synopsis: Comment choisissez-vous si un morceau de code au lieu de produire une exception, retourne un code d'état avec les résultats qu'il peut produire?