web-dev-qa-db-fra.com

MVVM pour winforms

Duplicata possible:
I Design Pattern pour Windows Forms (comme MVVM pour WPF)

MVVM doit-il être utilisé pour WinForms? Si oui, quel est l'avantage par rapport à l'utilisation de MVP?

31
SA.

Je pense qu'il y a deux réponses ici ... vraiment juste une réponse à "Dois-je" et une réponse à "Pourrais-je".

En ce qui concerne "Pourrais-je", c'est certainement possible. MVVM repose simplement sur une vue qui peut se lier à un modèle de vue. Puisque WinForms prend en charge la liaison, cela est certainement possible. Vous devrez peut-être écrire du code pour rendre cette liaison plus utile dans un monde MVVM, mais c'est (au moins) théoriquement possible. Si cela fonctionnait bien, les avantages seraient plutôt importants, IMO. Vous pouvez vous assurer que votre WinForms "View" n'a aucun comportement d'interface utilisateur, sauf pour créer les objets visuels et les lier (dans le code, pas déclaratif comme en XAML). Les objets WinForms sont très difficiles à tester, les ViewModels étant très faciles à tester.

En ce qui concerne votre vraie question: "Dois-je", cela devient beaucoup plus une décision au niveau du projet. Quels sont vos objectifs? Si vous cherchez à rendre testable une logique d'interface utilisateur assez complexe, vous pouvez au moins l'examiner. Heureusement, cependant, il existe d'autres modèles (Model-View-Presenter, par exemple) qui ont plus de soutien de la communauté qui vous oblige également à écrire une classe "présentateur" testable. Je trouve que ViewModels est beaucoup plus facile à écrire des tests unitaires par rapport aux présentateurs, mais je pense que c'est une préférence personnelle.

En passant, le modèle MVVM est principalement un autre nom pour le modèle "Presenter Model". Vous pourriez regarder pour voir si quelqu'un réussit avec le "Presenter Model" contre les interfaces utilisateur WinForms.

Bonne chance!

21
Brian Genisio

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 suis d'accord que MVVM est Il est préférable de l'utiliser avec WPF car il exploite les capacités de liaison forte. Cependant, Windows Forms prend également en charge la liaison de données.

Le Adaptateur Windows Forms WAF montre comment appliquer le modèle MVVM dans une application Windows Forms.

8
jbe

Je ne crois pas que MVVM puisse être fait dans winforms (du moins pas sans beaucoup de piratage). MVVM sépare la vue (votre formulaire) du viewmodel (votre logique).

La raison pour laquelle cela peut être fait dans WPF est que WPF permet de coupler de manière lâche la vue du modèle de vue via la liaison de données dans xaml. Cela permet au ViewModel de ne rien savoir de la vue et de toujours pouvoir fonctionner. Ceci est un bon article sur les bases de MVVM, je crois que cela clarifiera plusieurs questions.

0
Jose