Je me bats avec une question très simple:
Je travaille maintenant sur une application serveur, et j'ai besoin d'inventer une hiérarchie pour les exceptions (certaines exceptions existent déjà, mais un cadre général est nécessaire). Comment puis-je même commencer à faire cela?
Je pense suivre cette stratégie:
1) Qu'est-ce qui ne va pas?
- Quelque chose est demandé, ce qui n'est pas autorisé.
- Quelque chose est demandé, il est autorisé, mais cela ne fonctionne pas, en raison de paramètres incorrects.
- Quelque chose est demandé, c'est permis, mais ça ne marche pas, à cause d'erreurs internes.
2) Qui lance la demande?
- L'application client
- Une autre application serveur
3) Remise des messages: comme nous traitons avec une application serveur, il s'agit de recevoir et d'envoyer des messages. Et si l'envoi d'un message se passe mal?
En tant que tel, nous pouvons obtenir les types d'exceptions suivants:
- ServerNotAllowedException
- ClientNotAllowedException
- ServerParameterException
- ClientParameterException
- InternalException (dans le cas où le serveur ne sait pas d'où vient la demande)
- ServerInternalException
- ClientInternalException
- MessageHandlingException
Il s'agit d'une approche très générale pour définir la hiérarchie des exceptions, mais je crains de manquer de cas évidents. Avez-vous des idées sur les domaines que je ne couvre pas, connaissez-vous des inconvénients de cette méthode ou existe-t-il une approche plus générale de ce type de question (dans ce dernier cas, où puis-je la trouver)?
Merci d'avance
catch
blocs que j'utilise, je n'ai pas beaucoup plus recours à l'exception que le message d'erreur qu'il contient. Je n'ai vraiment rien de différent que je puisse faire pour une exception impliquée dans l'échec de la lecture d'un fichier comme un échec d'allocation de mémoire pendant le processus de lecture, j'ai donc tendance à attraper std::exception
et à signaler le message d'erreur qu'il contient, peut-être à décorer avec "Failed to open file: %s", ex.what()
un tampon de pile avant de l'imprimer.
catch
blocs différents dans un seul site de récupération, mais souvent c'est juste pour ignorer le message à l'intérieur de l'exception et imprimer un message plus localisé ...