Salut à tous !
J'ai un programme de la forme :
En fait, mon exception PersonnalizedException correspond dans mon cas à exception contenant un message et une suite de valeurs nécessaires pour CalculateSomething(), dont la vérification a échoué (ex : pas remplies par l'utilisateur). Afin de faciliter la vie de mon utilisateur, je souhaite que le message puisse afficher l'ensemble des valeurs non remplies, afin qu'il ne commette pas 2 fois la même erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 protected int GetValueOne() { if (DetectSomethingWrong()) throw new PersonnalizedException(); return CalculateSomething(); } protected int GetValueTwo() { if (DetectSomethingWrong()) throw new PersonnalizedException(); return CalculateSomething(); } public double GetFinalValue() { try { return GetValueOne() / GetValueTwo(); } catch (PersonnalizedException exception) { CallTHisMethodWhenAnExceptionHasBeenCatched(exception); throw; } }
Pour l'instant j'ai envisagé de remplacer la gestion de ces exceptions par la mise à jour d'une liste de valeurs "non remplies" (contenue dans une propriété de type List). Si cette liste n'est pas vide au moment de l'appel à GetFinalValue(), cela lance une PersonnalizedException qui contient donc le même message, mais avec une liste complète des valeurs car la liste est fournie en paramètre au constructeur de la classe PersonnalizedException.
Mais cela ne me convient pas tout à fait pour plusieurs raisons :
- L'exception n'est pas gérée de façon "propre" : je préfère générer une exception au sein de chaque méthode, ce qui m'évite de me poser la question de "comment chaque exception est gérée au sein de chaque méthode ?" et pouvoir simplement les catcher quand les dites méthodes sont appelées
- Je ne souhaite pas modifier la logique de mes méthodes GetValueOne() et GetValueTwo(), qui retournent soit le résultat d'un calcul, soit génèrent une exception en cas d'échec (là encore, c'est beaucoup plus propre) ; je ne souhaite pas retourner une valeur random en cas d'échec du calcul
- J'ai déjà une propriété contenant une exception qui me permet de la communiquer à ma vue pour le respect du modèle MVVM, et je trouve que c'est déjà un peu limite ; je ne souhaite donc pas pourrir mon code avec une nouvelle propriété (la liste des valeurs non remplies) qui nécessite à nouveau un système de vérification / reset.
J'ai aussi pensé à générer une liste des exceptions dans ma propriété de type Exception, mais cela ne règle pas mon problème actuel : seule la 1ère exception est lancée et donc catchée...
Des idées ? Ou est-ce que je me plante complètement et que les exceptions ne sont pas faites pour gérer les erreurs d'entrée de l'utilisateur ?...
Partager