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 :

Implémentation de MVC


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 86
    Points : 56
    Points
    56
    Par défaut Implémentation de MVC
    Salut,

    Je cherche un exemple complet et fonctionnel de l'implémentation du modèle MVC en C# et Winforms avec le .NET 2.0

    Voila 2 jours que je suis sur Google sans rien trouver ....

    Merci,

  2. #2
    Membre chevronné
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Points : 1 904
    Points
    1 904
    Par défaut
    Salut

    Il y a deux articles sur MVC dans la section tuto (cherche simplement "MVC") dans la page

    C'est en VB.Net cependant

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 86
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par Piotrek
    Il y a deux articles sur MVC dans la section tuto (cherche simplement "MVC") dans la page
    Je l'ai évidemment fait mais c'est ni complet ni fonctionnel ....

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 9
    Points : 9
    Points
    9
    Par défaut C# - MVC?!?
    J'ai le même problème. Je souhaite implémenté un système MVC en C# mais je ne trouve rien de concluant sur le web.

    J'ai implémenté il y a qq temps un MVC en C++ avec la librairie Qt qui base tous ces widgets sur le principe MVC. Il existe déjà dans la librairie Qt ainsi toute un panel de classe pour mettre un système MVC.

    Dans les librairies C#, n'y a-t-il rien qui existe pour mettre en place un MVC? Ou sinon, quel classe me conseilleriez-vous d'utiliser?


    Voici le schéma MVC que je souhaite implémenté :

    Base de données SQL
    /\
    ||
    \/
    Modèle (lecture/écriture des données)
    /\
    ||
    \/
    Modèles intermédiaires (proxy, filtres)
    /\
    ||
    \/
    Controleurs (edit et combobox)
    /\
    ||
    \/
    Vues (tableau de données, edit, combobox)

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    beh, personnellement, je trouve que le tuto (surtout celui qui est assez recent < 3 mois) est largement complet pour comprendre la philosophie du MVC

    Autant en C++/MFC microsoft fournissait des templates pour faire "du pseudo" MVC via le Doc & View, autant cela n'est plus le cas avec la plateforme .Net

    Mais de là à dire que le tuto est incomplet et ne permet pas de s'en sortir (je ne suis pas le rédacteur du tutoriel), je trouve cela un peu "abusif" (et je pese
    mes mots )

    Si le tuto n'est , toutefois pas suffisant pour vous, eh beh, je vous conseille de vous orienter vers de la litterature en discutant

    Apres, MVC étant un pattern, le langage pour le mettre en oeuvre n'est pas important

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    Je n'ai pas dit que ce tutoriel n'était pas complet, mais pas concluant...

    MVC est un motif de conception qui n'a rien à voir avec un langage ou une librairie en particulier. J'en suis tout à fait conscient. Toutefois, si une librairie m'offre des classes déjà prévues pour fonctionner selon le schéma MVC, je m'en réjouis! C'est le cas de Qt, où il suffit de faire un "setModel(monModel)" sur la vue et le pattern MVC est en place! ... presque aussi simple ...

  7. #7
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    malheureusement, il n'y pas de framework .Net permettant de faire du MVC de façon simple et directe sans avoir "peu de chose" à coder...

    J'ai cru comprendre qu'en Java, il y avait un tel framework... malheureusement,
    .Net est encore jeune et est parfois le "parent" pauvre ...

    Maintenant, j'ai pas fait de recherche, mais peut-etre que sur Source forge, il y a des projets MVC pour .Net en cours de réalisation ? à voir !!!

    The Monz, Toulouse
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 9
    Points : 9
    Points
    9
    Par défaut
    J'ai trouvé ce projet sur sourceforge. Il s'agit d'un framework .NET 2.0 pour implémenter un MVC sur une application WinForms ou sur une appli Web.

    Il y a une documentation fournie dans l'API. Sinon une intro et un "QuickStart" bien foutu. Le tout est en anglais.

    http://sourceforge.net/projects/ingeniousmvc

    Remarque : la doc est à télécharger depuis la même page où on peut télécharger l'API.. et non pas dans la partie documentation..

  9. #9
    Nouveau membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 24
    Points : 25
    Points
    25
    Par défaut MVC implémenter
    En fais, le modèle MVC est facile à implémenter si vous vous donner la peine de le faire.

    Un classe Observable qui à comme propriété une liste contenant tout les Observer, un attribut indiquant si l'objet est changer et principalement 4 fonctions:
    • setChanged: Change l'état de l'objet a changer
    • notifyObserver: Averti les Observer que l'objet à changer en appelant la fonction Update de chaque Observer.
    • addObserver: Ajoute un Observer à la liste
    • removeObserver: Supprime un Observer de la liste


    Un interface Observer ayant une simple fonction:
    • Update(Observable ob, Object arg): "Ob" étant la référence vers l'objet Observable qui à changer et "arg" étant un argument quelle conte passer en parametre à la fonction. Cette fonction rafraichie la fenètre avec les nouvelles valeurs de l'objet Observable.


    Le controleur en fais sont des actions qui ce produisent. Donc un click sur un bouton ou un Timer appelant une fonction de notre objet Observable. Normalement, nos Objets d'affaire hériteraient de la classe Observable et nos formulaire C# implémenterais l'interface Observer.

    Bonne chance

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Le modèle MVC est relativement simple a implémenter avec les evenement et le principe des delegate


    declaration de l'evenement à lancer lors d'une modification et de la methode de notification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     public delegate void MonEventHandler(object sender);
              public event MonEventHandler MonEvent;
     
            // notification de changement
            public void Notify()
            {
                if (MonEvent != null)
                    MonEvent(this);
            }
    l'ajout de la methode update de la vue a la liste de notification du modèle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonObjetModele objModel = new MonObjetModele();
          objModel.MonEvent += new MonObjetModele.MonEventHandler(MaVue.update);
    MaVue.update est la methode permettant de mettre à jour la vue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     public void update(object sender)
    {
          if (sender is MonObjetModele )
          {   
              // appels aux getters du Modèle
          }
    }

  11. #11
    Nouveau membre du Club
    Inscrit en
    Septembre 2009
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    J'ai du mal à comprendre ce que dit Chafouin.
    J'ai tenté de réaliser une calculatrice en MVC mais à mon avis ce que j'ai fait n'as rien de telle.

    La vue : Crée en winform. Pour ca je pense qu'il n'y a pas de problème.
    Le controlleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
     public partial class Form1 : Form
        {
            modele mymod = new modele();
            public Form1()
            {
                InitializeComponent();
            }
     
     
            private void textBox1_TextChanged(object sender, EventArgs e)
            {
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                textBox1.Text = "1";
                mymod.setNombre(1);
            }
     
     
            private void button2_Click(object sender, EventArgs e)
            {
                textBox1.Text = "2";
                mymod.setNombre(2);
            }
     
            private void buttonPlus_Click(object sender, EventArgs e)
            {
                textBox1.Text = "+";
                mymod.setOperateur("+");
            }
     
            private void buttonMoins_Click(object sender, EventArgs e)
            {
                textBox1.Text = "-";
            }
     
            private void buttonDiv_Click(object sender, EventArgs e)
            {
                textBox1.Text = "/";
            }
     
            private void buttonFoi_Click(object sender, EventArgs e)
            {
               // textBox1.Text = "*";
                textBox1.Text = mymod.getResultat().ToString(); 
            }
        }
    Le contrôleur ici gère les action utilisateur. Cependant ce n'est pas le model qui met a jour la vue, est ce correct ?

    Le modele :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     public class modele
        {
            private int nombre = -1;
            private int resultat = -1;
            private string operateur = null;
     
            /* Effectue le calcul */
            public void calcul(int secondNombre)
            {
                if (operateur == "+")
                {
                    resultat = (nombre + secondNombre);
                }
            }
     
            /* Affichage forcé du résultat*/
            public int getResultat()
            {
                return resultat;
            }
     
            /* Définit l'opérateur de l'opération
             * @param operateur */
            public void setOperateur(string optr)
            {
                operateur = optr;
            }
     
            /* Définit le nombre à utiliser pour l'opération
             * @param nbre */
            public void setNombre(int nbre)
            {
                if (nombre == -1)
                {
                    nombre = nbre;
                }
                else
                {
                    calcul(nbre);
                }
            }
    Le modèle sauvegarde les nombre, effectue les calcul.

    voila ici dans ce code pour moi il y a bien une séparation entre ce que voit l'utilisateur, ce qui traite les données, et une classe qui gère ces composants.
    Cependant ici il n'a y ni delegate, ni d'event ...

    voila, si vous pouvez m'éclairer.
    Cordialement.
    Sammy

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 7
    Points
    7
    Par défaut
    Bon je suppose que tout le monde a abandonné ce topic mais je me lance:

    Citation Envoyé par Omsalam Voir le message

    Le contrôleur ici gère les action utilisateur. Cependant ce n'est pas le model qui met a jour la vue, est ce correct ?
    Justement, le model doit pouvoir prévenir la vue d'une modification des données. Dans ton cas si tu possèdes une deuxième vue liée à ton modèle, elle ne rafraichira pas ses données (puisque le controleur ne modifiera qu'une seule vue).

    Pour ma part je pense que le plus simple pour mettre en place un pattern MVC en .NET est d'opérer de la manière suivante:

    La VUE: comme il a été dit, il suffit de créer un winform

    Le contrôleur: il suffit d'utiliser la classe partielle correspondant à la vue et de gérer les événements, cependant contrairement à l'exemple précédent, cette classe ne doit pas modifier les différents éléments de la vue. Ainsi pour reprendre l'exemple précédent, on aura:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     private void button1_Click(object sender, EventArgs e)
            {
                 //Le controlleur ne modifie pas la vue
                //textBox1.Text = "1";
               //
                mymod.setNombre(1);
            }
    Enfin, afin d'effectuer la liaison entre le modèle et la vue et le contrôleur il suffit d'utiliser du databinding, le modèle servant de source de données. Afin que cela fonctionne il ne faut cependant pas oublier de faire implémenter l'interface INotifyPropertyChanged par le modèle afin que celui-ci "prévienne" les vues de chaque modification de ses propriétés.

Discussions similaires

  1. Implémentation du MVC
    Par dotEden dans le forum Langage
    Réponses: 3
    Dernier message: 24/10/2012, 15h01
  2. Méthode implémentation SWT "MVC"
    Par threaded dans le forum SWT/JFace
    Réponses: 5
    Dernier message: 14/04/2011, 13h33
  3. Implémentation DAO MVC
    Par Hanoni dans le forum Général Java
    Réponses: 4
    Dernier message: 21/09/2009, 08h46
  4. implémentation Pattern MVC
    Par cyberlulu dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 01/11/2008, 16h50
  5. Implémentation du MVC en ASP.NET
    Par rabddoul dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 23/02/2008, 11h21

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