Question

Je ne développe pas trop d'applications de bureau / Windows Forms, mais je pensais qu'il pourrait être avantageux d'utiliser le modèle MVC (Model View Controller) pour le développement Windows Forms .NET.

Quelqu'un at-il implémenté MVC dans Windows Forms? Si oui, avez-vous des conseils sur la conception?

Était-ce utile?

La solution

Par le passé, j'ai utilisé quelque chose de similaire, Présentateur de modèle .

[NOTE: Auparavant, cet article était disponible sur le Web. Pour le voir maintenant, vous devrez télécharger le CHM, puis afficher les propriétés du fichier et cliquer sur Débloquer. Ensuite, vous pouvez ouvrir le CHM et trouver l'article. Merci mille fois, Microsoft! soupir ]

Le formulaire correspond à la vue, et j’ai une interface IView pour cela. Tout le traitement se passe dans le présentateur, qui est juste une classe. Le formulaire crée un nouveau présentateur et se transmet en tant que IView du présentateur. De cette manière, vous pouvez passer un faux IView à l’essai, puis lui envoyer des commandes de la part du présentateur et détecter les résultats.

Si je devais utiliser un contrôleur de modèle complet à part entière, je suppose que je le ferais de cette façon:

  • Le formulaire est la vue . Il envoie des commandes au modèle, déclenche des événements auxquels le contrôleur peut s'abonner et s'abonne aux événements du modèle.
  • Le contrôleur est une classe qui s'abonne aux événements de la vue et envoie des commandes à la vue et au modèle.
  • Le modèle génère des événements auxquels la vue est abonnée.

Cela correspondrait au diagramme MVC classique . Le principal inconvénient est qu'avec les événements, il peut être difficile de dire qui souscrit à quoi. Le modèle MVP utilise des méthodes plutôt que des événements (du moins la façon dont je l'ai implémenté). Lorsque le formulaire / la vue déclenche un événement (par exemple, someButton.Click), le formulaire appelle simplement une méthode sur le présentateur pour exécuter la logique correspondante. La vue et le modèle n'ont aucun lien direct. ils doivent tous les deux passer par le présentateur.

Autres conseils

En fait, Windows Forms implémente un "style libre". version de MVC, un peu comme certains films implémentent un "free-style" de merde interprétation de quelques livres classiques (on pense notamment à Roméo et Juliette).

Je ne dis pas que la mise en oeuvre de Windows Forms est mauvaise, c'est simplement ... différente.

Si vous utilisez Windows Forms et les techniques de POO appropriées, et peut-être un ORM comme EntitySpaces pour votre accès à la base de données, vous pouvez dire que:

  1. L'infrastructure ORM / OOP est le modèle
  2. Les formulaires sont les vues
  3. Les gestionnaires d'événements sont le contrôleur

Bien qu'il soit plus difficile de séparer le code de la représentation de la vue et du contrôleur représentés par le même objet (il n'est pas facile de brancher une "vue GTK +" dans une classe dérivée de Microsoft.Windows.Forms.Form). .

Que pouvez-vous faire si vous êtes assez prudent? Conservez votre code de formulaire complètement en dehors de votre code de contrôleur / modèle en n'écrivant que des éléments liés à l'interface graphique dans les gestionnaires d'événements et toute autre logique métier dans une classe distincte. Dans ce cas, si vous souhaitez utiliser GTK + pour écrire un autre calque View, il vous suffira de réécrire le code de l'interface graphique.

Windows Forms n'est pas conçu pour utiliser MVC. Vous avez deux options.

Tout d'abord, vous pouvez lancer votre propre implémentation de MVC.

Deuxièmement, vous pouvez utiliser un framework MVC conçu pour Windows Forms.

Le premier est simple à faire, mais plus vous avancez, plus c'est complexe. Je suggère de rechercher un bon framework MVC préexistant et bien testé, conçu pour fonctionner avec Windows Forms. Je crois cet article de blog est un bon point de départ.

Pour ceux qui débutent, je vous suggérerais d'ignorer Windows Forms et de développer contre WPF, si vous en avez la possibilité. C'est un cadre bien meilleur pour la création de l'interface utilisateur. De nombreux frameworks MVC en cours de développement pour WPF, notamment celui-ci et celui-là .

Selon Microsoft, le bloc d’application UIP mentionné par @jasonbunting est "archivé". Au lieu de cela, consultez le Bloc d’application de client intelligent ou le plus récent < a href = "http://msdn.microsoft.com/en-us/library/aa480482.aspx" rel = "nofollow noreferrer"> Fabrique de logiciels Smart Client , qui prend en charge les SmartParts WinForms et WPF.

Consultez le Bloc d'application du processus d'interface utilisateur (UIP) . Je ne sais pas grand-chose à ce sujet, mais je l'ai examiné il y a quelques années. Il peut y avoir de nouvelles versions, vérifiez.

"Le bloc d'application UIP est basé sur le modèle MVC (modèle-vue-contrôleur)".

Jetez un coup d'œil au bloc de l'application MS Patterns and Practices Smart Client, qui contient des instructions et des classes qui vous guideront dans la mise en œuvre d'un modèle de présentateur de vue de modèle dans des formulaires Windows - jetez un coup d'œil à l'application de référence incluse.

Pour WPF, le projet prism est remplacé par

.

L’approche des fabriques de logiciels est un excellent moyen d’apprendre les meilleures pratiques

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top