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
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
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
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
Le Model
                                      View      ViewModel
public class Person : INotifyPropertyChanged,
IDataErrorInfo
{                                                 Model
   private string _firstName;
   private string FirstName
{
   get { return _firstName; }
    set
    {
          _firstName = value;
          OnPropertyChanged(‘’FirstName’’);
    }
}
…
Le ViewModel
                                     View       ViewModel
public class MainViewModel :
INotifyPropertyChanged, {
   private Person _modelPerson;                   Model
   private Person ModelPerson
{
   get { return _modelPerson; }
    set
    {
          _modelPerson = value;
          OnPropertyChanged(‘’ModelPerson’’);
    }
}
…
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’’ />
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
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
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…
Patrons de Design en relation
•   Model View Presenter (MVP)
•   Model View Controller (MVC)
•   Presentation Model (PM)
Conclusion
•   Séparation des préoccupations
•   Test et Maintenance
•   View and ViewModel binding
•   Implémentation

Model view-view model (mvvm)

  • 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 0UFC 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 Designen 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