68 votes

Comment implémenteriez-vous MVC dans une application WindowsForms?

Je ne développe pas trop d'applications de bureau / Windows Forms, mais je me suis dit qu'il pourrait y avoir un avantage à utiliser le modèle MVC (Model View Controller) pour le développement Windows Forms .NET.

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

43voto

Kyralessa Points 76456

Ce que j'ai fait dans le passé est d'utiliser quelque chose de similaire, Model-View-Presenter. La forme est le point de vue, et j'ai une IView interface. Tout le traitement se passe dans le présentateur, qui est juste une classe. Le formulaire crée un nouveau présentateur, et passe lui-même, en tant que présentateur du IView. De cette façon, pour les tests, vous pouvez passer d'un faux IView à la place, puis envoyer des commandes à partir de la présentatrice et de détecter les résultats.

Si je devais utiliser un véritable Modèle-Vue-Contrôleur, je suppose que je devrais faire de cette façon:

  • La forme est la vue. Il envoie des commandes pour le modèle, déclenche des événements qui le contrôleur pouvez vous abonner, et s'abonne aux événements du modèle.
  • Le contrôleur est une classe qui s'abonne à la vue des événements et envoie des commandes à la vue et le modèle.
  • Le modèle déclenche des événements qui la vue est abonnée.

Cela correspondrait avec le classique schéma MVC. Le plus grand inconvénient est que, avec les événements, il peut être difficile de dire qui est en vous abonnant à ce que. Le modèle MVP utilise des méthodes à la place d'événements (au moins la façon dont je l'ai mis en œuvre). Lorsque le formulaire/vue déclenche un événement (par exemple, someButton.Cliquez sur), la forme simplement appelle une méthode sur le présentateur pour exécuter la logique pour elle. La vue et le modèle n'ont pas de connexion directe à tous; ils ont tous les deux de passer par le présentateur.

19voto

dguaraglia Points 3113

Eh bien, en fait Windows Forms met en œuvre un "free-style" version de la MVC, à l'instar de certains films mettre en œuvre certaines de merde "free-style" de l'interprétation de certains livres classiques (Romeo & Juliet viennent à l'esprit).

Je ne dis pas que Windows Forms mise en œuvre est mauvais, c'est juste... différent.

Si vous utilisez Windows Forms et bonne programmation orientée objet, les techniques, et peut-être un ORM comme EntitySpaces pour votre base de données access, puis on pourrait dire que:

  1. L'ORM/POO infrastructure est le Modèle
  2. Les Formes sont les points de Vue
  3. Les gestionnaires d'événements sont le Contrôleur

Bien qu'ayant à la fois la Vue et le Contrôleur représentés par le même objet de faire la séparation du code à partir de la représentation chemin plus difficile (il n'y a pas de moyen facile de plug-in "GTK+ vue", dans une classe dérivée à partir de Microsoft.De Windows.Les formulaires.Le formulaire).

Ce que vous pouvez faire, si vous êtes assez prudent. Est de garder votre code de formulaire complètement séparé de votre contrôleur/modèle de code par écrit seulement GUI choses liées par les gestionnaires d'événements, et tous les autres de la logique métier dans une catégorie distincte. Dans ce cas, si vous avez toujours voulu utiliser GTK+ pour écrire une autre couche de la Vue, vous n'aurez besoin que de réécrire le code de la GUI.

17voto

Will Points 76760

WinForms n'est pas conçu à partir du sol jusqu'à l'utilisation de MVC. Vous avez deux options.

Tout d'abord, vous pouvez rouler votre propre mise en œuvre de la MVC.
Deuxièmement, vous pouvez utiliser un framework MVC conçu pour les WinForms.

Le premier est simple, pour commencer à faire, mais le plus vous obtenez, plus complexes, il est. Je vous suggère la recherche d'un bien préexistant et bien testé, framework MVC conçu pour fonctionner avec windows forms. Je crois que ce blog est un bon point de départ. Edit: ressemble le blog piraté. Voici la version mise en cache

Pour quelqu'un débutant, je vous suggère de sauter windows forms et le développement de contre WPF, si vous en avez la possibilité. Ses un bien meilleur cadre pour la création de l'INTERFACE utilisateur. Il existe de nombreux frameworks MVC cours d'élaboration pour WPF, y compris pour ce un et que un.

4voto

aridlehoover Points 760

Selon Microsoft, le bloc d'application UIP mentionné par @jasonbunting est "archivé". Examinez plutôt le bloc d’application Smart Client ou la plus récente usine de logiciels Smart Client , qui prend en charge les SmartParts WinForms et WPF.

2voto

Jason Bunting Points 27534

Vérifiez dans le bloc d'application UIP (User Interface Process) . Je ne sais pas grand-chose à ce sujet, mais je l'ai examiné il y a quelques années. Il peut y avoir des versions plus récentes, vérifiez autour de vous.

"Le bloc d'application UIP est basé sur le modèle MVC (model-view-controller)."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X