J'ai une classe qui encapsule les communications de socket tcp avec un serveur. Pour chaque message de commande envoyé au serveur, le serveur renvoie un message de réponse qui contient invariablement un code de réponse (OK, Fail). En utilisant ma classe, chaque commande peut être exécutée soit en synchronisation soit en asynchrone.Exceptions vs codes de résultat pour une classe de client de socket
Il existe essentiellement deux types d'exceptions: Un "défaut" provoqué par une déconnexion ou une autre erreur irrécupérable et une exception inattendue comme "envoyer le tampon est plein". En cas de panne, aucune commande ne peut continuer ou réessayer ou quoi que ce soit jusqu'à ce que la connexion soit rétablie. En cas de réponse d'échec ou même d'exception, la commande peut être réessayée ...
Ainsi, mes méthodes de commande de synchronisation retournent maintenant une énumération qui peut avoir les valeurs suivantes: OK, Fail, Fault. Si une exception se produit, elle est simplement portée au thread appelant (dans une commande de synchronisation). Pour les commandes async, la valeur enum de la propriété Result peut contenir une valeur supplémentaire: OK, Fail, Fault ou Exception et le rappel peut accéder à l'objet exception réel via la propriété Exception de l'objet de commande.
Que pensez-vous de cette stratégie? Je suis tenté de ne pas lever d'exception pour les commandes de synchronisation et de simplement consigner l'exception en interne et retourner la 4ème valeur enum parce que c'est tout ce que je ferai vraiment avec des exceptions dans tous les cas ... Ou, devrais-je codes de résultat du tout et juste soulever des exceptions dans tous les cas, même des fautes?
Merci.
Merci pour toutes vos réponses. La valeur que j'ai obtenue de ce fil était essentiellement un rappel pour "utiliser des exceptions pour des conditions exceptionnelles". Donc, je donne la réponse à la première personne qui a dit cela. Si je pouvais donner plusieurs réponses, je le ferais! –