Accès aux données via ADO.NET dans un contexte Client / Serveur Windows Forms

Accès aux données

Accès aux données via ADO.NET dans un contexte Client / Serveur Windows Forms


boblemar 06-26-2008, 14:40
Bonjour,

Ce post a pour but de sonder votre avis concernant la meilleur architecture pour une application Client (Forms) / Server (SQL Server) dans le cadre d'application centrées sur la saisie et l'interprétation de données.
Mon postulat initial est que, étant donné que le principal travail de l'application est de récupérer des données dans une base, les afficher à travers des formulaires, puis de transmettre les modifications à la base, l'idéal était de maintenir une connexion liée à chaque instace de mon application.
J'ai alors créé une classe exposant une connexion en tant que propriété partagée. Cette connexion est créée lors de la première requête, puis détruite en sortie de l'application. Cette solution n'est a priori pas la bonne car à chaque requête, il faut ouvrir puis fermer la connexion... Ce qui devrait s'avérer long. Sauf que visiblement, la connexion n'est détruite au niveau du serveur qu'après 5 minutes. Apparemment, avant cette destruction, l'ouverture de la connexion est instantannée.
Au détours de mes nombreuses promenades sur Internet, je me suis apperçu que la classe SqlConnexion pouvait (et gérait par défaut) gérer un pool de connexion.
J'ai alors pensé que, plutôt que de partager une connexion unique pour mon appli, le plus propre serait d'utiliser un pool de connexions maintenant au moins une connexion en survie. A chaque fois que j'ai besoin d'accéder à la base, il me suffit de créer une nouvelle connexion, ce qui a pour effet de demander au pool de m'attribuer une connexion disponible. J'ai lu ici ou là que dans un cadre Client / Serveur, ce n'était pas conseillé... mais sans explication. J'imagine que c'est parce que le serveur doit toujours gader une connexion pour le client, mais ça évite de rouvrir sans arrêt une nouvelle connexion.
J'ai enfin eu l'idée de créer une classe SmartConnection, un peu à l'instar des SmartPointers de C++. L'utilisation de cette classe permet de ne pas s'occuper de la libération de la connexion : La création d'une smartconnection crée (ou demande l'attribution au spool) une nouvelle connexion.  Dans le finalize de SmartConnection, la connexion est fermée et disposée. Cela évite d'oublier de fermer une connexion. Est-ce que cela présente un intérêt ?

Quel est votre avis sur la question ?

Bob

Sponsorisé par Community Server


Conditions d’utilisation et Copyright
Respect de la vie privée