Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1442 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Gestion effective des exceptions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gestion effective des exceptions

n°970363
FlorentG
Unité de Masse
Posté le 03-02-2005 à 11:26:02  profilanswer
 

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) :

Code :
  1. Public MustInherit Class Provider
  2.   Implements IProvider
  3.   Private Creator as ICreator
  4.   ...
  5.   Public Sub Create() Implements IProvider.Create
  6.     Me.Creator.Create(Me.Connection)
  7.     Me.Creator.AppendTables()
  8.     Me.Creator.SetPermissions()
  9.   End Sub
  10.   ...
  11. End Class


 
Et un exemple de la méthode Create dans mon ICreator, ici avec une base Access :

Code :
  1. Public NotInheritable Class MdbCreator
  2.   Implements ICreator
  3.   Public Sub Create(ByVal connection As OleDb.OleDbConnection) Implements ICreator.Create
  4.  
  5.     Dim Cat As New ADOX.Catalog
  6.     Cat.Create(connection.ConnectionString)
  7.   End Sub
  8.    ....
  9. End Class


 
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 :)

mood
Publicité
Posté le 03-02-2005 à 11:26:02  profilanswer
 

n°970469
chrisbk
-
Posté le 03-02-2005 à 13:21:47  profilanswer
 

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 ?

n°970472
FlorentG
Unité de Masse
Posté le 03-02-2005 à 13:23:36  profilanswer
 

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.

n°970474
chrisbk
-
Posté le 03-02-2005 à 13:25:38  profilanswer
 

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

n°970486
FlorentG
Unité de Masse
Posté le 03-02-2005 à 13:31:31  profilanswer
 

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 :/

n°970487
chrisbk
-
Posté le 03-02-2005 à 13:31:57  profilanswer
 

je savais bien que ca finirait en débat checked/unchecked [:franck75]

n°970490
FlorentG
Unité de Masse
Posté le 03-02-2005 à 13:33:30  profilanswer
 

lol :D
Dommage qu'on puisse pas définir dans l'interface un truc style :

Sub Create() Throws Exception

n°970494
chrisbk
-
Posté le 03-02-2005 à 13:36:09  profilanswer
 
n°970508
FlorentG
Unité de Masse
Posté le 03-02-2005 à 13:45:26  profilanswer
 

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...

n°970510
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 03-02-2005 à 13:46:24  profilanswer
 

Vous voulez pas terminer votre discu en MP ? :o Tout le monde s'en fout, de .NET, personne l'utilise [:spamafote]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
mood
Publicité
Posté le 03-02-2005 à 13:46:24  profilanswer
 

n°970514
FlorentG
Unité de Masse
Posté le 03-02-2005 à 13:47:58  profilanswer
 

:??: on est sur mon topic, qu'est-ce que tu délires ?

n°970519
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 03-02-2005 à 13:51:28  profilanswer
 

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 :o Donc hopopop, vous faites tout ça en MP et reste bons amis [:icon7]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°970527
FlorentG
Unité de Masse
Posté le 03-02-2005 à 13:55:29  profilanswer
 

... Et si quelqu'un d'autre venait en parler ?

n°970531
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 03-02-2005 à 13:56:53  profilanswer
 

Ca arrivera jamais :o


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°970539
chrisbk
-
Posté le 03-02-2005 à 14:07:36  profilanswer
 

Taiche, espece de charlot [:icon8]

n°970540
Taiche
(╯°□°)╯︵ ┻━┻
Posté le 03-02-2005 à 14:08:17  profilanswer
 

[:sisicaivrai]


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
n°970542
FlorentG
Unité de Masse
Posté le 03-02-2005 à 14:09:36  profilanswer
 

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...

n°970546
chrisbk
-
Posté le 03-02-2005 à 14:11:35  profilanswer
 

mais ICreator c'est une interface [:petrus75]
(et la gestion d'erreur au code de retour ca craint des fesses)

n°970553
FlorentG
Unité de Masse
Posté le 03-02-2005 à 14:15:35  profilanswer
 

Ouaip, ça craint un max :(, ça fait vieux :D
 
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...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Gestion effective des exceptions

 

Sujets relatifs
Gestion de liste V2 vous pouvez revenir tout casser :D[MFC] Gestion des clics : comportement étrange...
[Mod_Rewrite] Gestion des paramètresprix d'une page de gestion de tarifs
gestion de temps dans script AS[PHP] Création d'un système de gestion d'utilisateurs
[java] creer un thread qui lance des exceptionsBesoin de creer un outil de gestion de base de données
Oracle - Gestion de la BDD & interfacage C++[C/Linux] Gestion des interruptions [edit : exploiter le driver série]
Plus de sujets relatifs à : Gestion effective des exceptions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR