MVVM ou MVC? Vous souhaitez utiliser le même ensemble de classes pour WPF et ASP.NET

10

Je suis un débutant en termes de modèles de conception. Je viens de commencer à apprendre MVC quand j'entends un nouveau buzz, MVVM.

Je veux en savoir plus sur ces deux éléments en repensant une ancienne application d'inventaire et de facturation que j'ai développée pour un client. Je veux écrire à la fois une application WPF basée sur Windows et une version basée sur le Web. Je veux utiliser le même ensemble de classes si possible, sinon, au moins avec peu de modifications.

J'ai lu quelques articles, mais je ne suis pas en train de suivre l'architecture et les concepts de haut niveau de .NET 3.5 & 4 qui y sont discutés. Je veux avancer pas à pas en ne concevant que ce dont j'ai vraiment besoin dans mon projet réel.

Existe-t-il une référence étape par étape facile à MVVM? MVVM est-il un super-ensemble ou un sous-ensemble de MVC? Quel modèle est moderne et lequel dois-je choisir pour les versions Windows et Web de mon application?

Il y a certaines classes dont j'ai rarement besoin pour me connecter à la vue. Dans ce cas, la conception de la même classe à la manière de MVVM s'avérera être un travail supplémentaire.

RPK
la source

Réponses:

10

Existe-t-il une référence étape par étape facile à MVVM?

Oui il y a. Jetez un oeil à ici.

MVVM est-il un super-ensemble ou un sous-ensemble de MVC?

MVVM appartient à la famille MVC, donc, si vous pouvez le dire, c'est un sous-ensemble. C'est une variante pour dissocier l'interface utilisateur de la logique métier en dessous. Je le décrirais comme un frère de MVC. Depuis les premiers jours de la POO, les gens ont cherché des moyens de dissocier l'interface utilisateur de leur logique. MVC a été le premier archétype à évoluer. C'est assez simple, bien que la plupart des gens ne réussissent pas. La vue n'est qu'un observateur du modèle et l'appelle si nécessaire. Le contrôleur n'est qu'une stratégie permettant à la vue de communiquer avec le modèle, par exemple lorsque vous avez besoin d'un comportement échangeable (par exemple ReadonlyController, AdminController). MVC est un grand succès et c'est vraiment une bonne pratique de l'appliquer.

MVVM est un type de modèle MVP spécialisé , tel que décrit par Martin Fowler . MVP essaie de garder la vue aussi stupide que possible (tout en acceptant les commentaires des utilisateurs, etc.), améliorant ainsi la testabilité. Il vise une abstraction de la vue et de la logique d'interaction qui est de mettre dans le présentateur. Le présentateur communique uniquement avec le modèle / la logique métier et met à jour la vue. Martin Fowler décrit à peu près MVVM dans son modèle de présentation.

La vue est complètement abstraite dans un ViewModel. Lorsque vous avez Viewbesoin d'une propriété, ViewModelvous devez également l'avoir. Il (le ViewModel) est censé être complètement indépendant de la technologie d'interface utilisateur sous-jacente, une abstraction. Afin de communiquer entre View et ViewModel, un modèle de synchronisation doit être utilisé (c'est-à-dire Observer). Ce n'est pas facile à réaliser dans un environnement Web sans état. MVVM diffère de MVP, car la vue ne se lie plus à votre modèle / logique métier mais à un ViewModel à la place.

Quel modèle est moderne et lequel dois-je choisir pour les versions Windows et Web de mon application?

Le modèle de présentation (de type MVVM) devrait en théorie être complètement indépendant de la technologie d'interface utilisateur utilisée. Cependant, l'aspect de synchronisation doit être couvert. Cela peut facilement être fait en se liant aux commandes et propriétés avec WPF, où la colle de synchronisation est déjà présente. Avec ASP.NET, c'est une autre histoire. Cependant, il y a un article sur CodeProject qui utilisait le modèle de modèle de présentation avec toutes les technologies d'interface utilisateur Windows. Regarde.

Faucon
la source
4

En raison de problèmes de cycle de vie et de la nécessité de conserver l'état entre les publications de page, vous aurez du mal à réutiliser 100% de votre code sans interface utilisateur entre le Web et WPF. Asp.net n'a pas la puissante liaison de données qui est nécessaire pour MVVM, également une grande partie de la logique doit s'exécuter en jscript ces jours-ci, car les gens s'attendent à ce que l'interface utilisateur se mette à jour sans avoir besoin d'une publication.

Si vous pouviez utiliser SilverLight, votre vie serait beaucoup moins complexe :-)

De même, pouvez-vous héberger un navigateur Web dans votre application WPF pour les bits communs de l'interface utilisateur?

Ian
la source
Quels avantages puis-je obtenir avec SilverLight?
RPK
1
@PRK, Silverlight vous permettra principalement de faire tout ce que WPF fait et si vous pouvez demander à tous vos utilisateurs "Web" de l'installer, vous permettra également de créer une solution accessible sur le Web et "se sentant" comme une application Web.
Ian
4

Votre intention d'utiliser les mêmes classes pour l'interface utilisateur basée sur ASP.Net et WPF n'est pas très pratique. La liaison de données et l'utilisation de javascript sur le web sont très différentes de WPF. La seule option à laquelle je peux penser est MVP avec une vue complètement passive . En théorie, vous pouvez avoir le même présentateur qui remplit une page Web et WPF.
Dans la pratique, je développerai une architecture où la plupart des règles métier se trouvent dans une couche de service Web et deux niveaux de présentation différents avec le moins de règles métier possible qui parlent avec ce service Web.

softveda
la source