Mise en place event/delegate

dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 - 27 nov. 2010 à 15:49
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012 - 6 déc. 2010 à 17:22
Bonjour a tous,

Voila il faut un début a tout. En général le parcours de votre forum me suffit car j'ai toutes les réponses ou pistes a mes questions : mais la...c'est pas pareil.
Développement en visual studio 2008.

Definition du contexte :
J'ai un formulaire sur lequel j'ai une dizaine de Textbox. Je contrôle le remplissage des textbox sur l'évènement Leave de chacune d'elle.
Une fois que le formulaire est correctement alimente, l'utilisateur peut cliquer sur un bouton. Ce bouton va me servir a mettre toutes les données de ces Textbox dans une base de donnée (que je crée et alimente dans le code directement).

Les questions :
Voici donc ma question.

1) Ce que j'ai commence a mettre en place est une classe dans laquelle je voudrais gerer la création de ma base de donnée, son alimentation etc...lorsque l'utilisateur a cliquer sur le bouton "créer".
Je me suis dit les event/delegate sont fait pour ca, je me lance...seulement voila.

Est il possible de notifier (ou abonner ma classe via les events/delegates) a ma classe de gestion de base de donnée que l'utilisateur a clique sur "créer" pour qu'elle prenne le relais ?

Je vous rassure j'ai d'autres moyens de faire cela (et qui fonctionnent) mais je voudrais utiliser les évènements si c'est possible bien sur.
Jusqu'à présent les exemples/pistes que j'ai trouve ce sont les évènements entre 2 winforms mais moi c'est une winform et une classe.
Tout ca pour éviter de mettre toute une tartine de code dans le bouton "créer".
En effet, j'ai la solution de mettre tout mon code dans le bouton cliquer. Ça pas de problème facile a faire mais pas très propre. Comme je suis quelqu'un de très pointilleux et je voudrais faire cela correctement.



2) Question plus "philosophique". En développant mon application, je me suis pose pas mal de questions d'ordre philosophique.

Qu'est ce qui est le plus propre :
- "Déporter" le code dans des classes dédiées ?
- Ou bien mettre tout le code dans les Load, clic de boutons, Fermeture de forme etc... comme j'ai pu le voir assez souvent ?

Je m'arrête ici. Merci d'avoir pris le temps de me lire (c'est un peu long). Mais je tenais a bien décrire mon problème. Et merci a ceux qui pourront me donner des pistes.
Je ne poste pas de bout de code car je crois que pour comprendre il faudrait la solution complète. S'il le faut...je le ferais.
Et désolé pour les quelques accents manquants --> clavier qwerty.

3 réponses

cs_Robert33 Messages postés 834 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 14 janvier 2017 33
27 nov. 2010 à 20:35
Bonjour

Je voudrais tout d'abord répondre à ta 2eme question.
Oui c'est plus « propre » de déporter le code dans des classes dédiées.
L'écriture du code c'est un peu comme une escalade, il y a des paliers
-une méthode ne doit pas être trop longue, il faut donc éclater le code en plusieurs méthode, mais il ne faut pas tomber dans l'excès j'ai déjà vu des codes avec une foison de méthodes contenant 3 ou 4 lignes?
à mon avis la bonne mesure c'est la page écran, si le code est plus grand on découpe.
-Il faut regrouper les méthodes dans des classes, le regroupement se fait par affinité.
par exemple tout ce qui a attrait à l'interface graphique reste dans le code de la Form, le reste doit être ailleurs. La gestion des données dans une classe de données etc.
-Les classes peuvent se trouver dans un même fichier source mais il est préférable, pour la lisibilité de regrouper les classes dans des fichiers sources séparés en fonction de leur genre, par ex un fichier data.cs contenant ce qui est relatif à la base de donnée (objet de donnée et objet d'accès à la base)
-Enfin si des classes doivent être réutilisables ailleurs alors il faut les mettre dans un projet séparé (librairie de classes).

Pour ta première question, les événements/délégantes s'utilisent de la même manière que ce soit avec des Form ou des Class.
Mais dans ton cas je ne vois pas l'intérêt d'utiliser ce type me mécanisme.
Il vaudrait mieux que tu ais une classe Data, instanciée par ta Form principale, possédant les méthodes de mise à jour, appelées dans le gestionnaire d'événements.

Bob

C# is amazing, enjoy it!
0
dodo7263 Messages postés 614 Date d'inscription mercredi 10 septembre 2008 Statut Membre Dernière intervention 9 février 2017 6
27 nov. 2010 à 21:46
Merci Bob pour cette réponse détaillée et regorgeant d'informations utiles. Ce qui me rassure c'est que je suis parti avec la bonne philosophie de développement.

Je vais donc continuer dans cette voie...

Merci encore a toi bob...
0
l0r3nz1 Messages postés 218 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 17 mars 2012
6 déc. 2010 à 17:22
Salut,
avec toute cette lecture je vais te rendre l appareil ;)

Question code propre, j'ai une petite astuce.

une classe "montextbox" construit avec un textbox que tu abonne aux evenements
this.matextbox.leave += new System.EventHandler( this.verifieretrevenirsipasplein );

Faire une classe "textTotalControl" ou autre nom a ta guise avec comme arguments dans un premier constructeur un bouton et une liste de textBox a partir de laquelle tu construit une liste de "montextbox". un second constructeur qui construit cette liste avec tous les textbox d un form, et qui a donc comme arguments un bouton ( eventuellement sinon tu nomenclature le nommage des controles pour determiner qui sera de ton objet ou non) et un form ( que tu pourra construire manuellement du coup ).

tu abonne le bouton de ta classe aux evenements:
this.monboutton.click += new System.EventHandler(objetBDD.remplirBDD(... tableau de nom et string de tes texbox ... ));

lors du chargement ( le . load) d'un form tu construit tes objets:
textTotalControl TTC = new textTotalControl(this);

cette ligne suffira a chaque tu voudra controler un form de la sorte.

et comme il n'y pas de raisons que tu sois le seul a Philosopher:
http://shiman.wordpress.com/2008/08/15/c-net-delegates-arrays-of-delegates/
ca c est le lien qui explique les delegate et les tableaux de delegate

tu pourrais faire un truc dans ta BDD du genre:
Champs Sources, Champs Cibles, string qui renvoi a un numero grace a un tableau de string qui renvoi a une fonction grace a un tableau de delaguate et qui utilise les champs cible et source...

Pour une utilisation optimale de ce systeme l ideal serais de savoir lister toutes les fonction d'une classe.

qu'en pensez vous?

@+
0
Rejoignez-nous