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 :
- Public MustInherit Class Provider
- Implements IProvider
- Private Creator as ICreator
- ...
- Public Sub Create() Implements IProvider.Create
- Me.Creator.Create(Me.Connection)
- Me.Creator.AppendTables()
- Me.Creator.SetPermissions()
- End Sub
- ...
- End Class
|
Et un exemple de la méthode Create dans mon ICreator, ici avec une base Access :
Code :
- Public NotInheritable Class MdbCreator
- Implements ICreator
- Public Sub Create(ByVal connection As OleDb.OleDbConnection) Implements ICreator.Create
-
- Dim Cat As New ADOX.Catalog
- Cat.Create(connection.ConnectionString)
- End Sub
- ....
- 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