2010-01-26 5 views
12

J'utilise MVVM depuis deux ans et ça a certainement évolué pour le mieux depuis ce temps. En lisant les centaines d'articles MVVM et les questions de stackoverflow, j'ai remarqué qu'il y a de plus en plus d'articles qui décrivent la relation view/viewmodel et la création comme ViewModel en premier ou View en premier. Ces articles utilisent généralement IoC ou DI. J'inclurais des liens, mais en tant que nouvel utilisateur SO je suis seulement limité à 1.WPF - MVVM - Quels sont les avantages et les inconvénients des différentes techniques de création de vues?

Ma technique préférée a été l'utilisation de datatemplates pour créer les vues, et de structurer l'application sur les viewmodels plutôt que sur les vues . Je vois rarement des articles qui utilisent ce modèle.

<DataTemplate DataType="{x:Type ViewModels:DummyViewModel}"> 
    <Views:DummyUserControl DataContext="{Binding}"/> 
</DataTemplate> 

testabilité et le découplage semble être le principal objectif de ces « non-DataTemplate » création V-VM/conceptions des relations et des articles, et souvent ils doivent faire avec ou PRISM MEF. En fin de compte, je voudrais savoir ce qui suit:

  1. La technique de création de vue DataTemplate est-elle toujours utilisée ou recommandée?
  2. Quels sont les avantages/inconvénients de la vue première conception?
  3. Quels sont les avantages/inconvénients de la première conception viewmodel (avec la vue injectée)

Je me rends compte ce sont des questions qui méritent des réponses en vrac en vrac.

Tout bon lien vers des articles traitant de ces sujets est apprécié, à condition qu'ils ne soient pas liés au MEF/PRISM. Le plus c'est le mieux. (Google en est un bon nombre)

Répondre

2

1.La technique de création de vue DataTemplate est-elle toujours utilisée ou recommandée?

Ceci est ma méthode préférée de fonctionnement dans MVVM. J'aime beaucoup cette approche, pour des raisons que je vais préciser ci-dessous. Je l'utilise dans tout mon développement.

2.Quels sont les avantages et les inconvénients de la première vue?

Le principal pro que j'ai trouvé est que c'est un peu plus facile dans l'expérience de conception. Le concepteur "connaît" le contexte des données à l'avance, et a tendance à être capable de travailler plus facilement. De mon point de vue, la principale conclusion est que vous ajoutez un couplage plus étroit entre View et ViewModel. Il est également plus difficile de choisir un modèle spécifique pour circuler.

3. Quelles sont les avantages/inconvénients de la première conception viewmodel (avec la vue injectée)

Personnellement, je aime cette approche. De cette façon, le côté "logique" de votre application est complètement contenu dans votre couche ViewModel. En utilisant ContentPresenters, vous pouvez faire en sorte que ViewModel génère facilement d'autres ViewModels, en définissant le "flux" de votre application. Les vues peuvent être modifiées par un concepteur très facilement. Cependant, l'inconvénient est une légère diminution de l'utilisabilité du temps de conception, puisque les vues ne savent pas vraiment quoi que ce soit au sujet de la VM au moment de la conception, vous perdez une certaine facilité de conception.

+0

Bien que les clous mes propres expériences et opinions 100%. Avec tant de choses récemment écrites sur l'utilisation de conteneurs pour générer les vues et les modèles de vue, je commençais à m'inquiéter de manquer le bateau. Est-ce que vous injectez votre vue dans votre viewmodel en utilisant une interface? Personnellement, je ne veux pas que mes viewmodels aient une quelconque référence à la vue. – user259509

+0

Je n'ai pas mentionné MEF - mais je l'utilise aussi. C'est très utile pour gérer les cas de bords dans les domaines ci-dessus (c'est-à-dire: les services), ainsi que pour faire les modèles de données. Vous pouvez utiliser MEF pour configurer vos DataTemplates depuis votre View, sans avoir à "polluer" votre app.xaml, par exemple ... –

+0

Votre blog (http://reedcopsey.com/) est génial, btw – user259509

0

Nous avons constaté que l'approche DataTemplate avait certaines limites. Par exemple, le modèle est instancié en tant qu'instance partagée (singleton). Dans certains cas, cela a des effets secondaires indésirables.C'est la raison pour laquelle nous utilisons le premier design de ViewModel (avec la vue injectée).

L'approche que nous utilisons est décrite sur le WPF Application Framework (WAF) page du projet:

http://waf.codeplex.com/wikipage?title=Model-View-ViewModel%20Pattern&ProjectName=waf

Questions connexes