MVVM est le plus couramment utilisé avec WPF car il lui convient parfaitement. Mais qu'en est-il des Windows Forms? Existe-t-il une approche / un modèle de conception établi et couramment utilisé comme celui-ci pour Windows Forms également? Celui qui fonctionne explicitement bien avec Windows Forms? Y a-t-il un livre ou un article qui décrit bien cela? Peut-être MVP ou MVC?
winforms
design-patterns
bitbonk
la source
la source
Réponses:
J'ai essayé MVP et il semble également fonctionner très bien avec les formulaires Windows. Ce livre contient un exemple de formulaires Windows avec modèle MVP (exemple d'application de paie). L'application n'est pas si complexe mais vous donnera une idée de la façon de la créer.
Principes, modèles et pratiques Agile en C # ...
Vous pouvez obtenir le code source au code source
ÉDITER:
Il existe deux variantes du modèle MVP (a) Vue passive et (b) contrôleur de supervision
Pour les scénarios de liaison de données complexes, je préfère utiliser le modèle de contrôleur de supervision. Dans le modèle de contrôleur de supervision, la responsabilité de la liaison de données incombe à la vue. Donc, pour treeview / datagrid, cela devrait être dans les vues respectives, seule la logique indépendante de la vue devrait être déplacée vers le présentateur.
Je vous recommande de jeter un œil au framework MVP suivant MVC # - Un framework MVP
N'allez pas par le nom (c'est un framework MVP).
Vidéo MVP Winforms simple Winforms - MVP
Un exemple de gestion de MVP de liste déroulante - DropDownList
Exemple de liaison d'arborescence simple (liaison de pauvre homme). Vous pouvez ajouter n'importe quelle logique spécifique à l'arborescence dans BindTree ().
Vous trouverez ci-dessous l'extrait de code .... non testé, directement saisi à partir de la pensée ....
la source
Comme il l'a déjà dit, j'ai toujours travaillé dans un modèle MVP lors de l'utilisation de Winforms. Mais le modèle de conception que vous utiliserez ne signifie pas que vous utiliserez correctement. Il y a beaucoup d'anti-pattern attaché à MVP.
Si vous voulez tout démarrer correctement, vous devez utiliser le framework pour créer un client intelligent. Je recommanderai donc d'utiliser cette conception et ces pratiques: Smart Client Software Factory http://www.codeplex.com/smartclient
Vous avez ici une discussion sur les frameworks de clients intelligents actuels: http://codebetter.com/blogs/glenn.block/archive/2008/05/10/prism-cab-and-winforms-futures.aspx
PS: j'aime ce post sur les anti-patterns MVP: http://blog.mattwynne.net/2007/06/13/mvp-smells/
J'espère que cela t'aides
la source
Le modèle Model-View-ViewModel (MVVM) est un modèle de conception. Par définition, un modèle de conception montre une solution commune dans le monde orienté objet et cette solution peut être appliquée dans diverses plates-formes (WPF, WinForms, Java Swing, etc.). Je conviens que MVVM est mieux utilisé avec WPF car il tire parti des capacités de liaison fortes. Cependant, Windows Forms prend également en charge la liaison de données.
L' adaptateur Windows Forms WAF montre comment appliquer le modèle MVVM dans une application Windows Forms.
la source
J'ai écrit sur une variante des modèles de conception MVP / MVVM appelée MVP-VM, qui est une solution sur mesure pour les applications winforms qui nécessitent une couverture de test complète et utilisent la liaison de données comme mécanisme principal pour maintenir la présentation à jour avec les données du modèle.
MVVM pour .NET Winforms
la source
J'ai posé la même question à deux de mes collègues techniciens: est-ce que MVVM pour WindowsForms est possible? Les deux m'ont donné exactement la même réponse: " Pas question! WindowsForms manque les riches liaisons de WPF et Silverlight (OneTime, OneWay, TwoWay, OnewayToSource) et il manque également les TypeConverters ."
Encore une fois, pouvons-nous avoir MVVM pour WinForms? Oui nous pouvons. Nous avons toutes les pièces. Nous devons juste les coller ensemble.
la source
Je crois que MVP est un modèle bien adapté au développement de WinForms - comme en témoigne en partie son utilisation dans CAB - le cadre de Microsoft pour WinForms.
J'utilise MVP dans WinForms pour extraire le code de la vue - car je ne peux pas tester le code de la vue. Et aussi pour permettre au code qui doit être réutilisé (ou qui est dupliqué) de rester en dehors de la vue où il ne peut pas être partagé.
Je peux me référer à mon propre projet où j'utilise le modèle MVP ExceptionReporter.NET . Même si je suis sûr que je ne l'utilise pas parfaitement.
Vous avez mentionné que MVVM fonctionnait pour WPF - je pense que la raison en est une prise en charge solide de la liaison de données. Si vous n'utilisiez pas de liaison de données dans WPF (et ce n'est certainement pas obligatoire), vous pouvez choisir MVP. Le fait est que MVP est un choix fort pour toute application côté client. Et peut-être un `` meilleur '' choix, même dans WPF, si vous prévoyez de partager du code entre des projets qui ne sont pas WPF.
Pour plus de preuves de la valeur de l'utilisation de MVP dans WinForms, voir la présentation vidéo de Boodhoo sur l'utilisation de MVP: http://www.bestechvideos.com/2008/06/29/dnrtv-show-14-jean-paul-boodhoo-on-model -view-presenter Et un article MSDN du même auteur sur http://msdn.microsoft.com/en-us/magazine/cc188690.aspx
la source
Il ne s'agit pas de masquer le modèle en définissant plutôt précisément les interactions entre les différentes couches des applications. Vous pouvez modifier complètement le backend et tant que vous passez un modèle via Bindtree, votre interface utilisateur continuera à fonctionner.
Or, la classe Model peut être un mauvais choix de nom dans l'exemple donné par Rajesh. Il peut s'agir de TreeData ou RecordsData. Quelle que soit la façon dont vous le définissez, il a ce dont vous avez besoin pour utiliser le mécanisme de liaison de Winforms pour lier un contrôle spécifique aux données sous-jacentes.
Le meilleur site pour rechercher ce type de matériel est ici . Martin Fowler a rassemblé une variété de modèles de conception d'interface utilisateur et de modèles de conception d'entreprise utiles.
Encore une fois, la clé pour cela est l'utilisation d'interfaces pour définir précisément comment chaque couche interagit les unes avec les autres.
Dans ma propre application (une application CAD / CAM utilisée pour faire fonctionner des machines de découpe de métal), ma structure ressemble à ceci.
la source
Vous pouvez utiliser l' architecture d'entreprise, les modèles et les pratiques comme point de départ, bien qu'ils soient légèrement datés.
Sous Directives générales, il y a Architecture d'application pour .NET: Conception d'applications et de services , qui est une bonne introduction aux méthodes .NET et aux applications N-tier en couches.
texte alternatif http://i.msdn.microsoft.com/ms954595.f00aa01%28en-us%2CMSDN.10%29.gif
Pour des «modèles» plus formels, il existe des modèles de solutions d'entreprise utilisant Microsoft .NET . (source: microsoft.com )
Pour n'en nommer que quelques-uns,
la source
La première bonne explication des modèles de conception d'interface utilisateur que j'ai lue était dans le blog de Jeremy Miller - Construire votre propre CAB . Il décrit les modèles courants - Vue passive, MVP, etc. et aborde certaines des façons dont vous pouvez les implémenter en C #.
la source
Vous pouvez essayer MugenMvvmToolkit qui permet d'utiliser un "pur MVVM" pour WinForms. En raison du fait qu'il prend en charge les liaisons sur toutes les plates-formes, toutes les fonctionnalités de liaison natives disponibles pour la plate-forme WPF sont disponibles sur toutes les plates-formes (y compris WinForms).
la source