84 votes

Recherche d'un exemple MVC pour WinForm

Pouvez-vous m'indiquer une bonne application / infrastructure WinForms MVC dans le monde réel?

Je comprends la partie Modèle - ce sont vos données, et je sais que les formulaires sont les vues, mais quel est le contrôleur? Surtout si je veux utiliser la liaison de données.

52voto

FryHard Points 4037

Avant d'utiliser MVC assurez-vous que vous savez pourquoi vous êtes vous mettre la pensée de la douleur. Avoir des sections de code divisés en groupes logiques est grande, le déplacement de la logique de l'INTERFACE utilisateur est grand, mais les neuf mètres peut être plus d'effort que ça vaut la peine. (à mon humble avis)

L'ajout de la liaison de données pour le mélange va vous amener à la fin de l'hybride dans la plupart des cas. Dans le projet que je suis en train de travailler sur nous avons atteint la même situation que vous et après beaucoup de pourparlers et de la recherche s'est terminé par le suivant.

Modèle

Ce serait vos données comme vous l'avez dit, dans notre cas, c'est notre Domaine d'objets qui contiennent des informations sur le domaine. par exemple. Personne, D'Une Entreprise ...

Ces objets de domaine sont liés aux données pour les formulaires, ce qui peut offrir une communication directe entre votre MODÈLE et votre point de VUE.

Vue

Ce serait votre interface utilisateur ou d'un formulaire windows. Maintenant, puisque vous utilisez la liaison de données, vous serez plus que probablement avoir un BindingSource sur votre forme avec sa source de données pointant vers votre domaine d'objet. Avoir le point de Vue étant directement relié au Modèle d'ores et déjà commencer à briser MVC. Jetez un oeil à l'article de wikipedia sur MVC et de son schéma de la accepté de communication. Mais comme je l'ai dit plus tôt, nous allons nous retrouver avec un hybid de toute façon...

Contrôleur

Le contrôleur va finir par ne pas faire quelque chose proche de ce qu'est un vrai contrôleur est censé faire. Dans l'idéal MVC monde, le contrôleur peut gérer toutes les interactions avec la vue. cliquez sur un bouton: le contrôleur, ce qu'il faut faire et met à jour la vue après l'avoir fait. sélectionnez un élément dans une zone de liste déroulante: le contrôleur, ce qu'il faut faire et met à jour la vue après l'avoir fait. et ainsi de suite...

Pour cette "mise en œuvre", le contrôleur est chargé de fournir tous les méchants de code que nous ne voulons pas encombrer notre INTERFACE utilisateur .cs fichier. Donc, si à tomber vers le bas d'une liste modifiable doit remplir une autre zone de liste déroulante, mettez ce code dans le contrôleur. Si un formulaire est nécessaire pour mener compliqué d'enregistrer routine de mettre ensemble les trois objets et de les enregistrer dans le bon ordre, placez ce code dans le contrôleur.

Qu'est-ce que cela signifie dans la mise en œuvre des termes de

Lorsque vous créez une nouvelle instance d'un formulaire, vous devez faire deux choses.

  1. Créer une nouvelle instance de la forme du contrôleur et de l'enregistrer sur le formulaire
  2. Configurer votre domaine objet de la source de liaison pour la forme.
  3. Transmettre le formulaire pour le contrôleur de sorte que le contrôleur peut communiquer de retour à la forme.

Mais cette question n'est jamais mieux servi avec un exemple, consultez l'exemple de la solution que j'ai jeté ensemble. J'ai choisi de communiquer entre la Forme (point de VUE) et le CONTRÔLEUR directe avec des appels, mais vous pouvez toujours faire usage d'événements (qui je pense est le plus norme acceptée).

Espérons que cela aide..

46voto

Lucas Points 10415

Je suis également nouveau sur MVC/MVP modèles de Formulaires Windows, j'ai donc fait quelques recherches récemment. Apparemment, le motif est utilisé dans les Windows Forms est effectivement MVP, un dérivé de la MVC, à cause de la façon dont les contrôles/widgets gérer l'INTERFACE utilisateur des événements eux-mêmes, pas les contrôleurs (même si c'est seulement pour délégué pour le Contrôleur/Présentateur). MVP peut lui-même être subdivisé en la Supervision du Contrôleur et Passive Afficher les modèles.

J'ai trouvé le suivant MVP des cadres pour WinForms:

  • Microsoft des modèles et pratiques de la microfinance: Smart Client Software Factory (SCSF) s'appuie sur la Bibliothèque d'Entreprise (EntLib) et l'Application Composite Bloc (ACR). Il est très grand et génère beaucoup de (bon apparemment) code pour vous. Nécessite l'installation de l'Orientation de l'Automatisation des Extensions (GAX) et d'Orientation Automation Toolkit (GAT) VS add-ins pour créer un assistant-comme l'expérience et les menus contextuels ("add view", "ajouter un contrôleur", etc). Ne prend pas en charge EntLib 4.1 ou VS2008SP1 sans quelques corrections. Pour mon très petit projet, c'était gonflé overkill.

  • Microsoft patterns & practices: Composite guide d'Application en WPF (aka Prisme ou Application Composite de la Bibliothèque, CAL) est plus récente que SCSF et beaucoup plus simple. p&p semble avoir écouté les développeurs en supprimant les exigences pour EntLib, GAX, etc. Sa seule dépendance est l'Unité par défaut le conteneur d'injection de dépendances (vous pouvez utiliser d'autres). Met en œuvre d'autres liées à des motifs tels que des Commandes et de l'Agrégation d'Événements pour plus de découplage. Ils ont essayé de garder le WPF spécifique des choses distinctes, de sorte que WinForms soutien peut être ajoutée. Prisme 2.0 a été publié en Février 2009 et ajoute Silverlight soutien.

  • MVC#: MVP cadre qui prend en charge WinForms, WebForms, Silverlight, et le Compact Framework (Oleg Joukov). Il est plus simple de p&p sur les offres et n'a pas de dépendances externes. Ne pas utiliser un conteneur d'injection de dépendances, ni les met-il en œuvre agrégation d'événements, etc. Je n'ai pas aimé la façon dont MVC# essaie d'être très déclarative par défaut. Il s'appuie autant sur les attributs que vous devez déclarer des "chaînes magiques" comme champs juste pour accrocher les attributs. Puis de nouveau, il prend également en charge le fichier XML de configuration plutôt que des attributs et vous pouvez écrire votre propre config fournisseurs. Prise en charge des génériques (IController<IView>) semble avoir été ajouté récemment.

Le code Source est disponible pour les cadres. J'ai aussi trouvé quelques échantillons et de plain-pied thoughs qui peuvent vous aider à démarrer si vous souhaitez annuler votre propre:

Lectures complémentaires (vous trouverez beaucoup de liens croisés entre ces):

Je n'ai pas encore décidé si je vais utiliser Prism (avec Winforms extensions), MVC# (et écrire mes propres fournisseurs, dire non à la magie de chaînes de caractères), ou de terminer l'écriture de mon propre très très simple MVP "cadre". Ou je pourrait passer à WPF et de l'utilisation du Prisme.


EDIT: Composite Demande des Conseils pour WPF et Silverlight (Février 2009)(aka Prisme v2) a été publié.

3voto

Brett Veenstra Points 10238

Découvrez Conteur code source.

C'est un travail en cours, mais devrait vous donner beaucoup d'idées/exemples d'utilisations:

Et oui, je suis toujours activement à l'élaboration d'elle, il vient d'être mis de côté pour d'autres projets. Je l'utilise pour les tests d'acceptation dans mon nouveau travail et je vais après la libération de la (beaucoup, beaucoup) kinks et les ennuis sont aplanies. Ah, les joies de la dogfooding.

Je crois que Jeremy est l'écriture d'un livre sur les WinForms développement.

3voto

Brian B Points 369

Avez-vous vérifié le MVP (Modèle/Vue/Présentateur) format de la Smart Client Software Factory (SCSF), une partie de Microsoft Modèles et Pratiques?
Voir www.codeplex.com/smartclient. C'est un grand engagement, avec une courbe d'apprentissage, je vous recommande la lecture au moins David Platt livre pour en obtenir une bonne compréhension de base (www.rollthunder.com/Books/CABandSCSF/index.htm). Il génère beaucoup de code (le code est assez bonne, mais, puisque vous n'avez pas l'écrire, il peut être difficile jusqu'à ce que vous comprendrez mieux). Nous l'avons utilisé avec succès pour créer une application client où deux distincts mais INTERFACE utilisateur intégrée compomponents ont été créés par différents fournisseurs, de manière indépendante, et le cadre de leur cohabitent très bien.

2voto

Andrei Rînea Points 7554

Une architecture MVP (au lieu de MVC) ne convient-elle pas mieux à une application WinForms?

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