Gestion effective des exceptions - C#/.NET managed - Programmation
Marsh Posté le 03-02-2005 à 13:21:47
bin tu te fais ta hierarchie d'exception et tu convertis les exceptions specifique a un type de bd (postgres, machin, access) en ces exceptions generiques, non ?
Marsh Posté le 03-02-2005 à 13:23:36
Ah ouais c'est pas con
Genre je fais mon try dans ICreator.Create (nécessaire, car en cas d'erreur une COMException est levée), puis je balance genre une MdbCreatorException, héritée de CreatorException.
Marsh Posté le 03-02-2005 à 13:25:38
chui perdu dans ton affaire, ICreator etant une interface, y'a pas de definition de ICreator.Create.
Bref, chaque classe implantant ICreator doit avoir le même comportement, et donc generer les mêmes erreurs, c'est la le pivot de l'affaire
Marsh Posté le 03-02-2005 à 13:31:31
Ouaip, apparemment on peut pas forcer une méthode d'interface à lever une exception. Faudra bien faire gaffe à lever l'exception dans l'implémentation
Marsh Posté le 03-02-2005 à 13:31:57
je savais bien que ca finirait en débat checked/unchecked
Marsh Posté le 03-02-2005 à 13:33:30
lol
Dommage qu'on puisse pas définir dans l'interface un truc style :
Sub Create() Throws Exception |
Marsh Posté le 03-02-2005 à 13:45:26
Ok je vois, pas facile tout ça... Je crois le mieux c'est que chaque classe implémentant ICreator lance la même exception, qui sera récupérée par le Provider...
Marsh Posté le 03-02-2005 à 13:46:24
Vous voulez pas terminer votre discu en MP ? Tout le monde s'en fout, de .NET, personne l'utilise
Marsh Posté le 03-02-2005 à 13:51:28
FlorentG a écrit : on est sur mon topic, qu'est-ce que tu délires ? |
Ba vous êtes 2 à taper la discute sur un sujet pareil ; or, comme on l'a vu dans le sondage d'Yvele, personne n'utilise .NET Donc hopopop, vous faites tout ça en MP et reste bons amis
Marsh Posté le 03-02-2005 à 13:56:53
Ca arrivera jamais
Marsh Posté le 03-02-2005 à 14:08:17
Marsh Posté le 03-02-2005 à 14:09:36
Pourrions-nous recenter la discussion ?
Ou sinon une autre solution est de faire toute la gestion d'erreur dans ICreator. Et en cas d'erreur, on renvoi false. Le provider n'aura qu'a tester si la fonction renvoi true ou false pour continuer...
Marsh Posté le 03-02-2005 à 14:11:35
mais ICreator c'est une interface
(et la gestion d'erreur au code de retour ca craint des fesses)
Marsh Posté le 03-02-2005 à 14:15:35
Ouaip, ça craint un max , ça fait vieux
Galère tout ça tout de même... Ou alors au lieu de déclarer une interface ICreator, je la déclare en classe abstraite avec un peu de gestion d'erreurs...
Marsh Posté le 03-02-2005 à 11:26:02
Bon je post ça dans la cat .NET, mais ça peut concerner n'importe quel langage qui gère les exceptions (genre en Java ça marche aussi).
Donc je me questionne sur le meilleur moyen pour gérer une exception dans le cas que je vais vous présenter.
Donc c'est tout simple : mon application accède à des données dans une base. Pour offrir un maximum d'abstraction, les classes d'accès aux données sont définies par des interfaces. La première est IProvider, dont les classes héritées vont contenir les données, permettre de les charger, de les sauvegarder, de créer une nouvelle base, etc.
Ensuite pour pouvoir créer une nouvelle base, j'ai aussi utilisé une interface, ICreator. Car suivant les provider, les méthodes de création sont pas les mêmes (genre en OleDb, entre une base Access et une base SQL Server, ce sera pas le même Creator, par contre on peut avoir le même Provider).
Voici en gros un morceau de code (VB.NET) :
Et un exemple de la méthode Create dans mon ICreator, ici avec une base Access :
Donc maintenant, il se peut qu'il arrive un problème lors de l'appel à la méthode ICreator.Create : pas assez d'espace disque pour les base access, connexion impossible pour les SQL Server, etc... Chaque ICreator peut rencontrer son problème lors de la création de la base.
Donc ma question : Quel est le meilleur moyen pour gérer une telle exception, sachant que dans la classe Provider, je ne connais pas à l'avance le Creator
Donc déjà ce que je peut faire, c'est mettre un bloc Try...Catch dans ma méthode ICreator.Create, afin de catcher une exception et afficher le bon message d'erreur. Mais maintenant quel est le meilleur moyen pour signaler au Provider qu'une erreur est survenue ?
Genre je lève une exception qui sera catchée par le Provider. Ou alors pas de Try dans le Creator, on met tout dans le Provider, mais alors il faut un moyen pour customiser le message d'erreur...
Bon ça paraît tout simple comme problème, c'est d'ailleurs tout simple, mais comme plusieurs solutions sont possible, je voudrais savoir votre point de vue là-dessus