Top Banner
PRÉSENTATION DU PATTERN MVVM AVEC WPF Adopter le pattern MVVM avec WPF Atmane EL BOUACHRI
41

Introducthion mvvm avec wpf

Jan 17, 2017

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Introducthion mvvm avec wpf

PRÉSENTATION DU PATTERN MVVM AVEC WPF

Adopter le pattern MVVM avec WPFAtmane EL BOUACHRI

Page 2: Introducthion mvvm avec wpf

2

Historiques & enjeux du pattern MVVM..Les modèles MVC, MVP et MVVMImplémentation du MVVM avec WPF / XAML│ Databinding, Commandes, Conversion, Validation

Les plus et les moins…Les différentes approches d’implémentation MVVMMVVM Frameworks & Toolkits..│ Prism /MVVLight,..

Au delà du XAML │ Javascript / ASP,Net,..

PLAN

Page 3: Introducthion mvvm avec wpf

3

1HISTORIQUES & ENJEUX DU PATTERN MVVM

Page 4: Introducthion mvvm avec wpf

4

Enjeux

│ Séparer UI de la logique de présentation│ Rendre l'interface utilisateur testable.• TDD..

│ Réduire le couplage entre l'interface utilisateur et d'autres codes• IoC

│ Permettre aux Designers UI de travailler de manière plus indépendante. • Blendablity (En référence à Microsoft Blend)

HISTORIQUES & ENJEUX DU PATTERN MVVM

Page 5: Introducthion mvvm avec wpf

5

Historique

│ Créé en 2005 par John Gossman • Architecte logiciel chez Microsoft pour les technologies WPF et Silverlight• Première publication sur son blog :• http://blogs.msdn.com/b/johngossman/archive/2005/10/08/478683.aspx

│ MVVM est une spécialisation du modèle PM• PM (Présentation-Modèle) introduit en 2004 par Martin Fowler.

│ MVVM a été conçu pour satisfaire les exigences de WPF et Silverlight.

HISTORIQUES & ENJEUX DU PATTERN MVVM

Page 6: Introducthion mvvm avec wpf

6

2LES MODÈLES MVC, MVP ET MVVM

Page 7: Introducthion mvvm avec wpf

7

Anatomie du pattern MVC

│ Historique• Décrit en 1979 par Trygve Reenskaug, • Smalltalk au Xerox.

│ Propriétés• Le Modèle représente les données logiques• Le Controller est l'orchestrateur• Un Controller peut gérer plusieurs Vues 

│ Utilisation• ASP.NET MVC

MODÈLES MVC, MVP ET MVVM

Vue

Contrôleur Modèle

Trans

met ac

tion d

e

l'utili

sateu

r

Sélec

tionn

e une

vue

Mise-à-jour du modèle

Demande l’état

Modèle : Envoi des notifications

Page 8: Introducthion mvvm avec wpf

8

Modèle MVC : avantages & désavantages

│ Avantages• Le modèle MVC correspond le mieux à des applications web.

‐ ASP.net• Testabilité

‐ Un bon ajustement pour un Développement (TDD) approche Test-Driven.• Affichage du même modèle dans différents points de vue.

│ Désavantages• Event-driven• Classe lourde et complexe• Ne convient pas à WPF

© SOFTEAM Cadextan 2014 - Confidentiel

MODÈLES MVC, MVP ET MVVM

Page 9: Introducthion mvvm avec wpf

9

Anatomie du pattern MVP (Passif)

│ Historique• Décrit en 1990 par Mike Potel • Taligent Corporation(IBM).

│ Propriétés• Chaque Vue a un présentateur• La Vue est passive• Présentateur garde une référence de la Vue via une interface.• La vue et le modèle ne sont pas connectés

│ Utilisation• Windows Forms

MODÈLES MVC, MVP ET MVVM

Vue

PrésentationModèle

Interaction avec la vue via une interface (Contrat)

Mise-à-jour du modèle

Transmet action de l'utilisateur

Page 10: Introducthion mvvm avec wpf

10

MODÈLES MVC, MVP ET MVVM

Modèle MVP Passif : avantages & désavantages

│ Avantages• Séparation claire entre l'interface utilisateur et la logique métier• Maintenabilité• Capacité de tester tout le code dans la solution (à l'exclusion présentation visuelle et l'interaction)

│ Désavantages• Round-trip

‐ Vue présentateur Vue• Pas de DataBinding , moins adapté pour le WPF

‐ Ne profite pas de la richesse du XAML  

Page 11: Introducthion mvvm avec wpf

11

Anatomie du pattern MVP (Supervising Controller)

│ Historique• Proposé en 2004 par Martin Fowler

│ Propriétés• Chaque Vue a un présentateur• La Vue implémente une interface• La Vue n’est passive pas,

‐ Elle est connectée au modèle par le DataBinding.• Le rôle du Présentateur est diminué par rapport au MVP passif

│ Utilisation• Windows Forms

MODÈLES MVC, MVP ET MVVM

Vue

PrésentationModèleInt

eracti

on de

la vu

e ave

c le m

odèle

via l

e

DataBin

ding

Interaction avec la vue via une interface (Contrat)

Mise-à-jour du modèle

Transmet action de l'utilisateur

Page 12: Introducthion mvvm avec wpf

12

Anatomie du pattern PM

│ Historique• En 2004, présenté par Martin Fowler

│ Propriétés• La vue n’implémente aucune interface• Le PM enroule l’ensemble des données et fournit des propriétés• Couplage faible entre le PM et la vue

‐ Vue un observateur de la PM‐ DataBinding

│ Utilisation• WPF, Silverlight

MODÈLES MVC, MVP ET MVVM

BLL

Appel des méthodes

Vue Présentation

Rafraichissement de vue à partir du modèle

Modèle

Transmet action de l'utilisateur

Page 13: Introducthion mvvm avec wpf

13

Anatomie du pattern MVVM

│ Historique• En 2005, présenté par John Gossman• Microsoft

│ Propriétés• La Vue a un seul ViewModel• Un ViewModel peut être lié à plusieurs Vues• Un ViewModel est la représentation d’une Vue• Le modèle contient :

‐ les objets métiers, les règles métiers, accès au données,..

│ Utilisation• WPF, Silverlight, Xamarin Forms, …

MODÈLES MVC, MVP ET MVVM

Vue

ViewModel

Modèle

Mise

-à-jou

r du m

odèle

Envo

i des

no

tifica

tions

États & opérations

DataBinding

et commandes

Page 14: Introducthion mvvm avec wpf

14

3IMPLÉMENTATION DU MVVM AVEC WPF / XAML

Page 15: Introducthion mvvm avec wpf

15

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

ViewModel ModèleVue

Vue d’ensemble

│ Vue=XAML:• Toute Vue hérite de DependencyObject

│ ViewModel =DataContext• Le DataContext reçoit une instance du ViewModel correspondant

│ Model =Objet métier ne doit pas voir ni Vue, ni ViewModel

Page 16: Introducthion mvvm avec wpf

16

DependencyObject / DependencyProperty

│ DependencyObject :• Facilitent les fonctions de support qui sont requis par un balisage déclarative XAML• DependencyObject(s) seuls peuvent héberger une DependencyProperty• Tout Control WPF hérite de DependencyObject

│ DependencyProperty:• Propriétés de dépendance fournissent des fonctionnalités additionnelles pour le support du Databinding• Peuvent être définis à partir de balisage XAML et/ou Dans le code

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

Page 17: Introducthion mvvm avec wpf

17

Propriétés CLR / DependencyProperty

│ DependencyProperty :• Propriété de dépendance utilise résolution dynamique de valeur pour déterminer la valeur de la propriété. • Les propriétés de dépendance sont déclarées publiques, statique, et en lecture seule.• Les propriétés de dépendance sont enregistrées via la méthode statique DependencyProperty.Register, à l'intérieur

du constructeur statique.

│ Propriétés CLR:• Un sucre syntaxique encapsulant un champ privé d’une classe via get et set.

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

Page 18: Introducthion mvvm avec wpf

18

DataBinding• La liaison de données offre un moyen simple et cohérent aux applications de présenter les données et d'interagir

avec.│ Syntaxe :• <DependencyObject DependencyProperty=“{Binding Property}” />

│ Exemple:• <TextBox Text=“{Binding Name}” />

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

Vue (Xaml)Binding Target

Dependency

Property

DonnéeBinding Source

Property

One Way

Two Way

One Time

One Way To Source

Binding

Page 19: Introducthion mvvm avec wpf

19

Liaison de données (DataBinding)

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

ViewModel / Model(Source) XAML( Target)

CLR Property Dependency Property

CLR PropertyCLR Field

PropertyChanged event

Dependency PropertyDependency Property

Page 20: Introducthion mvvm avec wpf

20

Système des notifications

│ Interface : INotifyPropertyChanged• Notifier le Binding du Control qu'une valeur de propriété du DataContext (ViewModel) a été modifiée.

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

Update

Control Target

Dependency Property

ViewModelSource

PropertyBinding

PropertyChanged

abonnement

Page 21: Introducthion mvvm avec wpf

21

Commandes

• Les commandes sont un moyen de gérer des actions de l'interface utilisateur (UI)• Lier à couplage faible l’UI et le ViewModel qui exécute l'action.

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

Page 22: Introducthion mvvm avec wpf

22

Conversion

│ Définition :• Modifie les données sources avant de les passer à la cible en vue de leur affichage dans l'interface utilisateur.

│ Syntaxe XAML :• <TextBlock Text="{Binding Path=StartDate, Converter={StaticResource dateConverter}}"

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

FrameworkElement

Target Dependency Property

CLR ObjectSource

PropertyBinding

Value Converter

Page 23: Introducthion mvvm avec wpf

23

Validation

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

ValidationRules (Règle Personnalisé de validation ou

ExceptionValidationRule)

IDataErrorInfo(Fournit des informations d'erreur

spécifique pour un objet lié à une Vue)

Logique de validation UI / BL

La logique de validation est détaché de la source de données, et peut être réutilisée entre les contrôles.

La logique de validation est plus proche de la source

class MyValidations : ValidationRule

override ValidationResult Validate(object value, CultureInfo cultureInfo)

<object> <object.ValidationRules> MyValidations ou ExceptionValidationRule </object.ValidationRules> </object>

Class MyViewModel : IDataErrorInfo, INotifyPropertyChanged

ValidatesOnDataErrors="True"

Page 24: Introducthion mvvm avec wpf

24

Les tests unitaires

│ Possible sur les modèles│ Possible sur les ViewModel│ Pas possible sur les liaisons (Databinding)• Entre le XAML et le DataContext c’est .Net qui gère

│ les interactions entre le Modèle et le ViewModel ne sont pas toujours simple• Nécessite peut être l’utilisation de l’injection de dépendance (Mocking)

LES PLUS ET LES MOINS

Page 25: Introducthion mvvm avec wpf

25

MVVM Bonne pratique

│ Réduire au max ou éliminer votre code-behind│ Lier l'ensemble de vos entrées / sorties de l'interface utilisateur à votre ViewModel│ Mettre en œuvre INotifyPropertyChanged sur votre ViewModel│ Mettez votre point de vue comportement dans le ViewModel│ Ne mettez pas tout état d'affichage dans le modèle│ se lier uniquement à un objet de modèle, si il n'y a pas d'informations spécifiques à vue│ Pour les tests, traiter ViewModel que l'interface utilisateur réel│ Évitez les événements. Utilisez les commandes à la place

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

Page 26: Introducthion mvvm avec wpf

26

Les différentes approches d’implémentation MVVM

│ ViewFirst : • La View est l’élément directeur, elle instancie le ViewModel• Simple d’implémentation

│ ViewModelFirst• Le ViewModel est l’élément directeur, il instancie la View• Utilisation des DataTemplates implicites.• Souplesse pour le développement métier• « Blendabilité » réduite

│ ModelFirst• Le Model est l’élément directeur, approche Data centrique• les écrans sont générés depuis les données (Utilisation des DataTemplates )• Exemple : Microsoft LightSwitch

IMPLÉMENTATION DU MVVM AVEC WPF / XAML

Page 27: Introducthion mvvm avec wpf

27

4DÉMO…

Page 28: Introducthion mvvm avec wpf

28

5 LES PLUS ET LES MOINS…

Page 29: Introducthion mvvm avec wpf

29

Avantage

│ Modularité• Une Vue est liée à un seul ViewModel

│ Souplesse• UI peut être fait par des Designer• Partage du Code

│ Testabilité• Model et ViewModel

│ Maintenabilité

LES PLUS ET LES MOINS

Page 30: Introducthion mvvm avec wpf

30

Inconvénient

│ Difficile à déboguer• XAML

│ Problèmes de performance• Databinding

│ Nécessite des composants personnalisés│ Toute manipulation directe des contrôles doit être soigneusement isolée

LES PLUS ET LES MOINS

Page 31: Introducthion mvvm avec wpf

31

6MVVM FRAMEWORKS & TOOLKITS..

Page 32: Introducthion mvvm avec wpf

32

MVVM Toolkits

│ MVVM Light Toolkit : Laurent Bugnion (Début 2011)• http://www.galasoft.ch/mvvm/getstarted

│ MEFedMVVM• http://mefedmvvm.codeplex.com

│ Cinch : Sacha Barber• http://cinch.codeplex.com

MVVM TOOLKITS & FRAMESWORKS

Page 33: Introducthion mvvm avec wpf

33

UI composite

│ Microsoft Prism• Framework de référence mis en place par Microsoft• http://www.galasoft.ch/mvvm/getstarted

│ Calcium SDK• http://calciumsdk.net

│ Caliburn• Le premier Framework à construire une application composite UI avec WPF• http://caliburn.codeplex.com

MVVM TOOLKITS & FRAMESWORKS

Page 34: Introducthion mvvm avec wpf

34

7MVVM POUR AUTRES APPLICATIONS XAML …MVVMCROSS

Page 35: Introducthion mvvm avec wpf

35

Framwork MVVMCross & Xamarin│ PCL pour applications multi-plate-forme (C #) natives, transversales│ Framework de développement mobile MVVM multiplateformes• Silverlight pour WP7, WP8 • WPF• Mono pour Android (ou Xamarin.Android) • MonoTouch pour iOS (ou Xamarin.iOS) • le Framework WinRT XAML pour Windows 8 Store apps. • Mono pour Mac (ou Xamarin.Mac)

│ Softeam4U

FRAMEWORK MVVMCROSS / XAMARIN

Page 36: Introducthion mvvm avec wpf

36

ZMVVMCross & PCL

FRAMEWORK MVVMCROSS / XAMARIN

Propriétésappel Commandes

Notification des changementsMessages

Platform Specific

Vue

Cross Platform -PCL

Messages

ViewModel

Modèle

Page 37: Introducthion mvvm avec wpf

37

8AU DELÀ DU XAML !

Page 38: Introducthion mvvm avec wpf

38

JavaScript│ KnockoutJS (Steve Sanderson)• http://knockoutjs.com/documentation/observables.html

│ AngularJS (Brat Tech LLC, Google)• https://angularjs.org/

│ ExtJS• http://www.sencha.com/blog/ext-js-5-mvc-mvvm-and-more/

│ Knockback.js• https://github.com/kmalakoff/knockback

│ Kendo UI• http://demos.telerik.com/kendo-ui/mvvm/index

AU DELÀ DU XAML !

Page 39: Introducthion mvvm avec wpf

39

ASP.Net│ ASP.NET MVVM Excalibur• https://visualstudiogallery.msdn.microsoft.com/e63e6b76-6e15-470b-8bbe-2c3185b05635• https://www.nuget.org/packages/ASP.NET_MVVM_Excalibur

AU DELÀ DU XAML !

Page 40: Introducthion mvvm avec wpf

40

Adobe Flex │ Projet LordViktor• https://github.com/lordviktor

│ Cairngorm :• Plugin applicatif Flex Visualiser et debugger les internes du framework

‐ http://lab.kapit.fr/default/cairngorm-console/

AU DELÀ DU XAML !

Page 41: Introducthion mvvm avec wpf

Faites de votre projet un succès

21, avenue Victor Hugo75016 Paris

www.softeam.fr

AVEZ-VOUS DES QUESTIONS?

41