2. Plan
0 Histoire
0 Intention
0 Structure
0 MVVM
0 Le Model
0 Le View
0 Le ViewModel
0 Collaboration
0 Conséquences
0 Utilisations connues
0 Patrons de Design en relation
0 Conclusion
3. Histoire
• 2004 Martin Fowler – Presentation Model (PM)
Une séparation de son état et de son comportement
Indépendamment d’un Framework UI
• 2005 John Gossman dévoile le patron MVVM
Comme extension du patron MVC
• 2008 John change d’avis
MVVM est identique au PM
Dépendant au WPF/Silverlight
4. Intention
• Les préoccupations de séparation
View
L’état et le comportement du View
Données
• Test unitaire et les tests de l’interface graphique (UI)
• Maintenance
• Extensibilité
• Permet le flux de travail designer/développeur
• Profite du « data binding » du WPF/Silverlight
5. Structure
View ViewModel
• Model Model
Aucune référence du View ou du ViewModel
• View
Peut avoir une référence du ViewModel (pas obligatoire)
Aucune référence du Model
• ViewModel
Référencé à partir du Model
Peut avoir une référence à partir du View
6. Le Model
View ViewModel
public class Person : INotifyPropertyChanged,
IDataErrorInfo
{ Model
private string _firstName;
private string FirstName
{
get { return _firstName; }
set
{
_firstName = value;
OnPropertyChanged(‘’FirstName’’);
}
}
…
7. Le ViewModel
View ViewModel
public class MainViewModel :
INotifyPropertyChanged, {
private Person _modelPerson; Model
private Person ModelPerson
{
get { return _modelPerson; }
set
{
_modelPerson = value;
OnPropertyChanged(‘’ModelPerson’’);
}
}
…
8. Le View
View ViewModel
<!– First Name -->
<TextBlock Text=‘’First Name:’’ Margin=‘’5’’ />
< TextBox Grid.Column=‘’1’’ Margin=‘’5’’/>
Model
<!– Last Name -->
<TextBlock Grid.Row=‘’1’’ Text=‘’Last Name:’’ Margin=‘’5’’ />
< TextBox Grid.Row=‘’1’’ Grid.Column=‘’1’’ Margin=‘’5’’/>
<!– UpdatedDate-->
<TextBlock Grid.Row=‘’2’’ Text=‘’Age:’’ Margin=‘’5’’ />
< TextBox Grid.Row=‘’2’’ Grid.Column=‘’1’’ Margin=‘’5’’/>
<!– Save Button-->
<Button Grid.Row=‘’3’’ Grid.ColumnSpan=‘’5’’ Content=‘’Save’’
Margin=‘’10’’ />
9. Collaboration
View ViewModel
• Model
Les données
Model
• View
Binding au ViewModel à traver DataContext
• ViewModel
Expose le Model comme propriété ou commande
Doit implémenter INotifyPropertyChanged
10. Conséquences
0 Avantages
• Réduit le code relatif
• Pas besoin de changer le Model pour supporter le View
• Les Designers design, les développeurs développent
• Réduit le temps de développement
0 Inconvénients
• Crée plus de fichiers
• Les tâches simples peuvent devenir plus compliquées
• Manque de standardisation
• Spécifique au plateformes WPF et Silverlight
11. Utilisations connues
0 Microsoft
0 UFC Gym
0 US Army
0 Family.Show
0 Prism Reference Implementation
0 AQUA
0 Plusieurs Framework
• MVVM Light Toolkit
• Caliburn
• Cinch
• Onyx
• MVVM Foundation
• Etc…
12. Patrons de Design en relation
• Model View Presenter (MVP)
• Model View Controller (MVC)
• Presentation Model (PM)
13. Conclusion
• Séparation des préoccupations
• Test et Maintenance
• View and ViewModel binding
• Implémentation