2009-08-07 7 views
0

Je commence juste à creuser dans le modèle MVVM pour WPF mais parce que je ne suis pas un développeur professionnel, je me sens parfois un peu perdu.Dépendances dans le MVVM

Le principal problème que j'ai est de décider qui devrait créer qui: Disons que j'ai une base de données contenant des chiens et des chats. J'aurais alors un DatabaseManager qui communique avec la base de données (Unit of Work !?), un DogRepository/CatRepository et les objets Dogs/Cats. De l'autre côté, j'ai ma MainWindow avec laquelle l'utilisateur peut ouvrir/fermer la base de données et qui contient une Listbox pour les chats et une pour les chiens, donc j'ai besoin d'un MainWindowViewModel, CatsViewModel et DogsViewModel.

Mais comment créer ces objets? Dans mon application, je crée la MainWindow évidemment. Et alors? Est-ce que je crée un MainWindowViewModel et le passe à MainWindow ou est-ce que MainWindow crée son propre MainWindowViewModel? Comment le DatabaseManager est-il créé? Par le MainWindowViewModel?

Qu'en est-il de CatsViewModel et du CatRepository correspondant? Le MainWindowViewModel crée-t-il le CatsViewModel qui à son tour crée un CatRepository? Je suis vraiment confus.

Répondre

1

Vous êtes confus car toutes ces options sont valides. Si vous n'utilisez pas l'injection de dépendances et que les ViewModels disposent de toutes les informations dont ils ont besoin, il n'y a aucune raison de ne pas créer le viewmodel (généralement en créant un View via une StaticResource pour la View:

<Window.Resources> 
    <local:CatViewModel x:Key="catVM" /> 
</Window.Resources> 
<Grid DataContext="{StaticResource catVM}"> 
... 
</Grid> 

Si vous sont par injection de dépendance, il est toujours parfaitement valable de déclarer votre VM en tant que dépendance de votre point de vue dans son constructeur:

public CatView(CatViewModel vm) : this() 
{ 
    this.DataContext = vm; 
} 

la dernière option est le concept d'un tiers qui crée à la fois la vue et le viewmodel (mais est approprié) et les marie en om en dehors des deux. Habituellement, cela s'appelle un présentateur.

Dans tous les cas, toutes ces options sont valides. Vous devriez choisir celui qui vous convient le mieux. Je suis sûr que quelqu'un viendra et réclamera le blasphème, mais c'est vraiment à la hauteur de vos besoins et de votre projet.

+0

Les Merci de votre explication. Il m'a fallu du temps pour me familiariser avec WPF et MVVM et maintenant je peux apprécier votre réponse. – CaptainProton

+0

Content de pouvoir aider! –

0

Le modèle MVVM (View-Model-ViewModel) ne définit pas qui est responsable de la création des différentes classes. Par conséquent, vous trouvez beaucoup d'approches différentes dans la communauté MVVM. J'aime utiliser un contrôleur d'application ou des contrôleurs de cas d'utilisation qui gèrent le flux de travail de l'application. Ils sont donc responsables de créer les classes ViewModel et Repository.

Un exemple concret comment cela fonctionne est montré dans l'échantillon ViewModel du projet:

WPF Application Framework (WAF)

http://waf.codeplex.com

Questions connexes