IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Pattern Observateur/ évenements/ découplage


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut Pattern Observateur/ évenements/ découplage
    Bonjour tout le monde,

    J'ai une form constituée d'un UserForm, lui même constitué d'un DatagridView.
    Afin d'alléger le code de ma form, initialisation du dataSet, Mise en forme du DatagridView, traitements selon certains évenements, j'ai décidé d'utiliser quelques patterns afin d'alléger le code et de réduire certains couplage...

    Apres maintes reflexions, j'ai décidé d'utiliser le pattern Builder afin de construire ma Form étape par étape, ceci fait, maintenant je souhaiterais connaitre vos méthodes afin d'externaliser le code des traitement évenementiels... Utiliser vous le pattern Observateur??? médiateur???

    Ai je été assez clair???


    Tout conseil, avis serait trés appréciable, merci d'avance

  2. #2
    Membre émérite

    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Points : 2 624
    Points
    2 624
    Par défaut
    Dans une form, tout le code doit être évènementiel (sauf si on fait des trucs sales). Quel code veux-tu rajouter ?

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Matthieu MEZIL
    Dans une form, tout le code doit être évènementiel (sauf si on fait des trucs sales). Quel code veux-tu rajouter ?
    Je suis entièrement d'accord avec toi. Ceci dit, lorsque tu réponds ou tu traites un évenement, tu dois mettre ton code en dur dans une méthode abonnée à un évenement comme celle ci par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void dgvDetailDevis_CellMouseClick(object sender,   DataGridViewCellMouseEventArgs e)
            {
     
                mouseLocation = e;
                objetDeclencheur = sender;
     
                contextMenuStripRow.Show(Cursor.Position);
     
            }
    Vous admettrez bien qu'en codant en dur dans ce genre de méthodes, le couplage et la flexibilité en prenne un coup
    J'ai donc pensé à utiliset le pattern Observateur, en considérant la form comme le sujet et de développer un observateur qui effectuera tous les traitements sur la forme, suis je dans la bonne route???
    Si qq aurait un exemple, un lien... je sais cela revient au fameux MVC...
    Merci de vos conseils...

  4. #4
    Membre émérite

    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Points : 2 624
    Points
    2 624
    Par défaut
    SI tu veux découpler ta Form de ton code évènementtiel, ce que tu peux faire c'est définir tes propres évènements dans ta Form et écrire le code suivant :

    private void dgvDetailDevis_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
    if (CellClik != null)
    CellClick(sender, e);
    }
    public event DataGridViewCellMouseEventHandler CellClick;

    Ensuite ton Observer ne fait que se brancher sur les évènement de ta form.

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Matthieu MEZIL
    SI tu veux découpler ta Form de ton code évènementtiel, ce que tu peux faire c'est définir tes propres évènements dans ta Form et écrire le code suivant :

    private void dgvDetailDevis_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
    {
    if (CellClik != null)
    CellClick(sender, e);
    }
    public event DataGridViewCellMouseEventHandler CellClick;

    Ensuite ton Observer ne fait que se brancher sur les évènement de ta form.
    Question bête Comment fais tu pour le brancher???
    Merci de ta compréhension

  6. #6
    Membre émérite

    Inscrit en
    Novembre 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2006
    Messages : 128
    Points : 2 624
    Points
    2 624
    Par défaut
    Dans ta classe Observer, tu lui passes ton instance de Form et ensuite, tu fais frm1.CellClick += ...

    Si c'est un click, tu peux faire comme ça. En revanche, si c'est pour la modification d'une valuer, je te conseille fortement d'utiliser le DataBindings pour jouer le rôle d'observer.

  7. #7
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par Matthieu MEZIL
    Dans ta classe Observer, tu lui passes ton instance de Form et ensuite, tu fais frm1.CellClick += ...

    Si c'est un click, tu peux faire comme ça. En revanche, si c'est pour la modification d'une valuer, je te conseille fortement d'utiliser le DataBindings pour jouer le rôle d'observer.
    Juste une rectification
    Comme tu dis il faut créer dans le sujet (Ma form) un évenement public qui aura pour signature toute méthode ne retournant rien et ayant deux paramètres ( Object sender et EventArgs e). Ensuite, on crée dans l'observer une méthode ayant la meme signature qui réalise le traitement que l'on souhaite ensuite on instancie l'observer comme ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    MonObserver obs = new MonObserver();
    Form maForm = MonBuilder().RecupereFenetre();
    maForm.CellCick +=  new eventHandler(obs.MonTraitement)
    De cette manière, il n'y a aucun couplage
    JE vous conseille cet article
    http://msdn2.microsoft.com/en-us/arc.../ms998543.aspx
    Merci pour vos conseils

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/02/2010, 16h17
  2. [Prototype] Pattern observateur ?
    Par Arnaud F. dans le forum Bibliothèques & Frameworks
    Réponses: 6
    Dernier message: 16/10/2009, 19h21
  3. Utilisation du pattern Observateur dans la mise en place d'une architecture MVC
    Par Guyiom dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 25/09/2009, 17h14
  4. [POO] pattern observateur
    Par poukill dans le forum C++
    Réponses: 3
    Dernier message: 16/12/2007, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo