Professional Documents
Culture Documents
De la dcouverte
la matrise
MVVM
De la dcouverte
la matrise
Focus
Digit Books
diteur de livres numriques
Brest
infos@digitbooks.fr
http://www.digitbooks.fr
Les programmes figurant dans ce livre ont pour but dillustrer les sujets traits. Il nest donn aucune garantie quant
leur fonctionnement une fois compils, assembls ou interprts dans le cadre dune utilisation professionnelle
ou commerciale.
Toute reprsentation ou reproduction, intgrale ou partielle, faite sans le consentement de lauteur, de ses ayants
droit, ou ayants cause, est illicite (loi du 11 mars 1957, alina 1er de larticle 40). Cette reprsentation ou reproduction, par quelque procd que ce soit, constituerait une contrefaon sanctionne par les articles 425 et suivants du
Code pnal. La loi du 11 mars 1957 autorise uniquement, aux termes des alinas 2 et 3 de larticle 41, les copies ou
reproductions strictement rserves lusage priv du copiste et non destines une utilisation collective dune
part et, dautre part, les analyses et les courtes citations dans un but dexemple et dillustration.
3
4
4
5
6
6
6
6
6
7
7
8
8
9
10
11
11
11
13
14
16
18
21
Pourquoi ce livre
Prrequis et public
Organisation de louvrage
Les conventions utilises
propos des auteurs
Jonathan Antoine
Thomas Lebrun
propos des relecteurs
Arnaud Auroux
David Catuhe
Julien Corioland
Lonard Labat
Remerciements
22
24
24
26
26
27
28
31
32
35
36
37
39
40
40
41
42
43
43
45
46
47
48
49
50
50
51
51
52
56
56
58
58
59
59
59
61
ii
3. 3. 4. Inconvnients
3. 3. 5. retenir du Model First
3. 4. Quelle philosophie adopter
3. 5. retenir
4 Construire la partie modle
4. 1. Architecture du modle de donnes
4. 2. Comment dfinir le modle global
4. 3. Comment crer le modle client
4. 3. 1. Classe de base du modle client
4. 3. 2. Dfinition du modle client
4. 3. 2. 1. Mapping
4. 3. 2. 2. Wrapping
4. 4. Comment concevoir les services daccs aux donnes
4. 4. 1. Abstraction des services de donnes
4. 4. 2. Implmentation concrte des services
4. 4. 3. Le pattern Unit Of Work
4. 4. 4. Appels asynchrones
4. 5. Validation des donnes
4. 5. 1. Validation du format
4. 5. 2. Validation fonctionnelle
4. 6. dition des donnes: suivi des valeurs du modle client
4. 7. retenir
5 Construire un ViewModel
iii
61
62
62
63
64
65
68
72
72
75
76
80
83
83
86
92
95
100
101
110
113
119
120
146
146
148
148
150
153
155
156
157
158
159
162
165
166
167
169
169
170
171
172
173
174
177
179
181
183
186
193
193
199
201
202
203
207
207
210
210
212
iv
215
217
222
222
225
225
230
231
232
232
233
238
239
241
243
244
245
245
247
248
248
250
251
251
254
254
256
256
258
259
263
265
267
267
267
269
271
271
272
272
273
274
275
275
276
280
281
285
288
9 Glossaire
289
Index
291
8 MVVM et testabilit
vi
Et comme tous les sujets la mode, de nombreux crits sont apparus sur le
sujet de MVVM. tant amateur de philosophie mes heures, je me suis donc
intress la vision que chaque auteur pouvait avoir de lapproche et surtout
comment la relation avec le monde rel de lentreprise et du dveloppement
dans la vraie vie tait faite. Et ce que lon peut dire cest que le pragmatisme nest pas souvent de mise.
Cest donc avec un plaisir non dissimul que jai lu le livre que vous avez entre
les mains car il aborde le sujet de manire claire avec des exemples concrets
et pragmatiques. On ressent que les auteurs, que je flicite au passage, ne
sont pas uniquement des thoriciens mais aussi des dveloppeurs de terrain
qui ont mis en pratique maintes fois ce quils conseillent. Ils ne parlent donc
pas uniquement des bonnes choses, mais galement des cueils quil faut
viter.
Au final, vous ressortirez de la lecture de ce livre avec une vision claire de
MVVM, mais galement avec les poches pleines dexemples de code et de
rflexions intgrer dans vos futurs dveloppements.
Mme si loutil est important, cest la main qui le tient qui fait la diffrence. Et
votre main ne sera que plus efficace avec ce livre.
David CATUHE
Responsable relations techniques avec les dveloppeurs Microsoft
http://blogs.msdn.com/b/eternalcoding/
Nous avons donc souhait faire profiter les lecteurs des connaissances que
nous avons acquises, sur le terrain, dans le cadre de notre travail. Lobjectif
Prrequis et public
Cet ouvrage sadresse aux personnes soucieuses den savoir plus sur ce qui
tend devenir le pattern de rfrence, lorsque lon parle de dveloppement
dapplications WPF, Silverlight ou Windows Phone. Que vous soyez dveloppeur, architecte ou mme chef de projet, ce livre vous permettra de savoir
tout ce dont vous avez besoin!
Sa lecture vous prsentera bien sr les informations techniques ncessaires
la mise en place de MVVM dans un projet, mais il apporte aussi les connaissances thoriques sur ce pattern.
Dun point de vue technique, des notions en programmation oriente objet
sont ncessaires pour bien assimiler les exemples. Enfin, si vous connaissez
dj quelques design pattern, cest un grand plus!
Organisation de louvrage
2 2 Le chapitre 1, Prsentation du pattern MVVM,page 9, a pour objectif de
prsenter, succinctement, le pattern MVVM en dtaillant les diffrents
lments qui le compose.
2 2 Le chapitre 2, Les diffrents lments et leurs rles,page 22, met laccent sur
ces fameux lments de faon thorique, afin de dterminer clairement
quels sont leur rle, permettant ainsi au lecteur de bien comprendre
leur importance.
2 2 Enfin, parce quun dveloppement nest complet que si lon sest assur
quil ny a pas (ou peu) de bugs et afin de limiter les possibles rgressions au cours du dveloppement, le chapitre 8, MVVM et testabilit,
page 271, explique comment raliser les tests sur les diffrents lments,
chacun ayant ses propres particularits.
Thomas Lebrun
Architecte/Dveloppeur chez Infinite Square, Thomas est expert sur les technologies WPF, Silverlight et Windows Phone. Il sintresse plus particulirement lenrichissement de lexprience utilisateur, ainsi qu la mise en place
darchitecture logicielle. Son implication dans la communaut, au travers de
confrences, articles, livres, etc., lui vaut le titre de Microsoft MVP depuis
cinq ans dans la catgorie Client Application Development (https://mvp.support.microsoft.com/
profile=FF4FF146-E963-4665-9785-B84B6045E86D).
Windows Phone). Il sintresse galement aux technologies de golocalisation et de synchronisation (Bing maps, Sync Framework).
Arnaud intervient sur la ralisation de projets autour de ces technologies.
Il est charg de la mise en place de larchitecture logicielle, ainsi que des
bonnes pratiques de dveloppement. Et parce que larchitecture est un sujet
complexe traiter, la vision et lexprience de chacun apportant une analyse
diffrente du sujet, il a accompagn Thomas et Jonathan dans la relecture
de leur ouvrage afin de leur offrir un il extrieur sur la mise en pratique du
modle MVVM.
David Catuhe
Responsable des relations techniques avec les dveloppeurs chez Microsoft,
David est expert sur les technologies en rapport avec linterface utilisateur
(WPF/Silverlight/Html5/Xna/DirectX). Il est passionn par le dveloppement
logiciel depuis plus de 15 ans et affectionne tout particulirement les technologies en rapport avec la 3D (il a dans une vie passe dvelopp un moteur
3D temps rel en .Net). Ce passionn, fier dtre dveloppeur, se dfinit luimme comme un geek qui a fait de sa passion son mtier. Il a, tout au long de
sa carrire, expriment et vu de nombreuses approches pour architecturer
les dveloppements notamment dans le cadre de MVVM.
Julien Corioland
Consultant et formateur .NET chez Infinite Square, Julien est expert sur les
technologies WPF et Silverlight. Il se spcialise tout particulirement sur la
plateforme Windows Phone 7 laquelle il a consacr un ouvrage. Il travaille
au quotidien sur la ralisation de projets utilisant ces technologies et il a
apport au travers ses relectures un regard critique par sa vision de la mise en
place de MVVM sur de nombreux projets concrets dans la vraie vie.
Lonard Labat
Stagiaire chez Infinite Square, Lonard est passionn par le dveloppement,
et particulirement les technologies Silverlight et Windows Phone, autour
desquelles il a cocrit un ouvrage aux ditions ENI. Il sest, ds les premiers
projets sur lesquels il a travaill, attel la mise en place de bonnes pratiques
et de patterns tels que MVVM.
Remerciements
Nous tenons remercier toutes les personnes qui nous ont apportes leur
soutien, que ce soit lors de lcriture ou la relecture de cet ouvrage. Parmi
ces personnes, nous remercions tout particulirement David Catuhe, Julien
Corioland, Arnaud Auroux et Lonard Labat ainsi que Simon Ferquel pour
leurs relectures et avis dexperts.
Finalement nous (enfin surtout Jonathan) remercions tout particulirement
Nomie Antoine pour son soutien indfectible et sa patience tout au long
de ces mois. Avoir une femme aussi parfaite nest pas donn tout le monde.
1
Prsentation du pattern
MVVM
Pattern de dveloppement de rfrence pour le dveloppement dapplications WPF, Silverlight et Windows Phone, le pattern MVVM (Model-ViewViewModel) est devenu un lment incontournable de la panoplie des dveloppeurs. Cependant, tous ne savent pas comment en utiliser toutes les
subtilits disponibles, de par sa jeunesse et son manque de spcifications
dtailles.
Au cours de ce chapitre, nous aborderons prcisment ce quest le pattern
MVVM, et nous ferons un rapide comparatif des diffrents patterns existants
qui ont abouti sa cration.
2
Les diffrents lments
et leurs rles
MVVM correspond au triptyque Model-View-ViewModel. Ce sont les trois
lments sur lesquels est bas le pattern. Voici une description succinctede
chacun:
23
Comme nous avons pu le voir dans le chapitre prcdent, ce pattern a notamment pour objectif de faciliter au mieux le travail conjoint du dveloppeur
et du designer. Pour cela, il repose sur le concept de couplage faible entre la
vue et le ViewModel. On parle de couplage fort lorsque deux lments darchitecture logicielle sont lis et ne peuvent pas fonctionner indpendamment. Les briques de construction pour enfants sont des exemples concrets
du couplage fort: une pice de Lego ne peut simbriquer quavec une autre
pice de Lego et on ne peut pas en utiliser une dune autre marque.
Une solution ce problme est de crer des contrats fonctionnels : on ne
dfinit pas les diffrents lments par ce quils sont, mais par ce quils font ou
exposent. Dans notre cas, le ViewModel et la vue ne seront pas lis fortement
et ils pourront exister indpendamment lun de lautre. Ainsi, le dveloppeur
peut travailler sur le ViewModel sans avoir connatre la vue et le designer
peut travailler sur la vue sans avoir connatre le fonctionnement intrinsque
du ViewModel. La mme relation existe entre le modle de donnes et la vue.
Dans ce chapitre, nous allons dfinir plus prcisment ce que sont ces diffrents lments du pattern ainsi que leurs rles. Les diffrents moyens de
communication entre eux et les possibilits dimplmentation technique de
chacune de ces parties seront abordes dans les chapitres suivants.
3
Les diffrentes
philosophies
Il existe plusieurs faons dutiliser le pattern MVVM au sein de ces applications. Ces possibilits, que nous appellerons des philosophies , sont au
nombre de trois:
2 2 View First
2 2 ViewModel First
2 2 Model First
Chacune possde, bien sr, ses avantages et ses inconvnients que nous
allons tenter de dtailler tout au long de ce chapitre.
Avant daller plus loin, il est important de noter quil ny a pas une philosophie meilleure que les autres, il sagit simplement de trouver celle qui correspond le mieux aux besoins de lapplication en cours de dveloppement. De
plus, ne soyez pas surpris si, dans lun de vos dveloppements, vous utilisez
deux philosophies diffrentes: ce genre de choses se produit assez souvent
43
3. 1. View
First
3. 1. 1. Dfinition
Dans une approche View First, cest la vue, autrement dit le code XAML, qui
contrle le flux de travail de lapplication, savoir la faon dont les diffrents
lments vont faire rfrence les uns par rapport aux autres.
La littrature anglo-saxonne parle aussi du View First comme de lapproche
Top Down, savoir du haut (la vue) vers le bas (le code et le modle). Il faut
le voir comme une vision en couches par rapport lutilisateur final: la vue
est ce quil voit directement car il interagit avec et il na pas connaissance du
code qui est sous le capot (instanciation et choix des ViewModels, etc.).
4
Construire la partie
modle
Le modle endosse plusieurs responsabilits et ce chapitre prsente les diffrentes faons de raliser son implmentation. Cette partie du pattern MVVM
est peut tre lune des moins couvertes car au premier abord il est facile de
penser quelle est identique celle utilise dans les prcdents patterns (MVP,
MVC, etc.). Il en est tout autrement en ralit : lutilisation des technologies
de liaisons rvolutionne la faon dont sont conus les objets mtier.
Dans un premier temps ce chapitre prsente larchitecture de la couche
modle, puis il explique comment dfinir le modle global et crer le modle
client. Enfin, il aborde les techniques possibles pour mettre en place une validation fonctionnelle des donnes ou encore permettre leur dition dune
faon plus conviviale pour lutilisateur.
4. 1. Architecture
65
du modle de
donnes
La partie modle est base sur trois lments:
2 2 Le modle client galement appel modle de prsentation entirement li lapplication cliente et qui rpond ses problmatiques.
2 2 Les services daccs aux donnes, prsents sur la partie cliente et faisant
le lien entre ces deux types de modle.
Seuls le modle client et les services daccs sont visibles par les
ViewModels et les vues. Le modle client est conu spcifiquement pour
rpondre aux diffrents besoins de la partie cliente (validation, dition,
gestion des tats, etc.). Il est intimement li aux ViewModels et aux vues :
il y a un couplage fort entre celui-ci et ces deux derniers. Il est tout fait
possible de sabstraire de ce lien au moyen dinterfaces, mais cela alourdit le
dveloppement et il est recommand de ne le faire que si cela est strictement
ncessaire.
La manire dont sont construits et instancis les objets du modle de prsentation peut tre complexe et il est important que cette complexit ne se
retrouve pas au sein des ViewModels qui nont pas cette vocation. Aussi, ce
travail est ralis au sein des services daccs aux donnes qui sont alors utiliss par les ViewModels. Les services sont les intermdiaires entre le monde
extrieur (cest--dire, l o sont stockes les donnes) et le monde
intrieur (cest--dire lapplication cliente). Ce sont eux qui implmentent la logique de conversion du modle global vers le modle client. Les
ViewModels nont ainsi aucun besoin de connatre le modle global puisquils
ne doivent et ne vont pas lutiliser. Cette faon de concevoir les services daccs aux donnes est ce que lon appelle le design pattern Repository.
5
Construire un ViewModel
Le ViewModel est la pierre angulaire du pattern MVVM et nous avons vu
prcdemment quelles taient ses diffrentes fonctions. Dans ce chapitre,
nous allons voir comment il peut remplir ces rles de faon concrte. Dans
la suite, nous allons vous prsenter une manire bien prcise de construire
un ViewModel. Sil existe bien sr dautres faons de faire, le cas tudi est
gnrique et applicable dans la majorit des situations rencontres dans un
contexte professionnel.
Comme vous pouvez vous en douter, il ny a pas un seul ViewModel, mais
plusieurs, qui sont utiliss conjointement ou indpendamment. Nous tudierons donc dans un premier temps larchitecture utilise pour construire les
ViewModels. Ensuite, nous rpondrons aux diffrentes problmatiques
relatives lexposition des donnes du modle et des diffrentes actions
possibles sur le ViewModel. Finalement, nous tudierons comment sont
effectues les communications entre plusieurs ViewModels.
Dans ce chapitre nous considrons que le lecteur possde une connaissance suffisante des diffrents concepts introduits dans les technologies de
construction dinterfaces riches telles que les liaisons de donnes (binding)
5 Construire un ViewModel
5. 1. Architecture
121
et relations entre
les ViewModels
5. 1. 1. Classe
5. 1. 1. 1. Un
Les ViewModels ne sont pas dun type particulier, au contraire des objets
.Net classiques. Cependant, ils vont tous tre utiliss dune faon bien prcise
au sein des vues : laide des liaisons de donnes ou Binding. Celles-ci fonctionnent conjointement avec linterface INotifyPropertyChanged dclarant uniquement lvnement PropertyChanged. Aussi, une classe de base
nomme ViewModelBase va tre mise en place et chaque ViewModel va en
driver afin de factoriser cette logique de notification des changements de
valeurs des proprits. Cette classe va tout simplement implmenter linterface INotifyPropertyChanged afin de permettre les liaisons de donnes.
/// <summary>
/// Classe de base pour tous les ViewModel
/// </summary>
public class ViewModelBase : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
/// <summary>
/// Dclenche lvnement PropertyChanged pour une
/// proprit donne.
/// </summary>
/// <typeparam name=T></typeparam>
/// <param name=exp>Lexpression permettant
/// de retrouver la proprit.</param>
protected void RaisePropertyChanged<T>(Expression<Func<T>> exp)
{
var memberExpression = exp.Body as
MemberExpression;
6
Construire les vues
Les deux prcdents chapitres ont permis de dcrire de faon approfondie
les diffrentes manires dimplmenter les parties modle et ViewModel.
Cest donc sans surprise que ce chapitre va sintresser aux vues dans le cadre
du pattern MVVM.
Les vues sont les parties merges de liceberg quest une application riche.
En tant que telle cest aussi la partie qui va recevoir le plus dattention des
utilisateurs finaux. Le moindre dfaut visuel va tre remarqu immdiatement alors quun manque dans le modle ou les ViewModel ne sera connu,
pour ainsi dire, que des ralisateurs de lapplication. Afin dviter de glisser
sur cette patinoire, il est ncessaire de raliser la perfection cette couche
du pattern. Ceci est valable la fois dun point de vue esthtique et ergonomique, mais aussi dun point de vue technique pour permettre de faire
voluer facilement lapplication. Dans la suite du chapitre, nous nous intresserons plus au travail des dveloppeurs tout en indiquant les moyens
permettant de faciliter le travail dun graphiste et ou dun designer.
Dans un premier temps, une dfinition de ce que sont les vues sous un angle
technique sera donne. Larchitecture gnrale des diffrents lments
167
constituant les vues sera ensuite prsente. partir de celle-ci nous tudierons comment les vues peuvent utiliser les ViewModels de faon simple et
comment elles vont rpondre des besoins un peu plus avancs. Finalement,
aprs avoir dcrit les utilisations du modle au sein des vues, des techniques
permettant la cration de vues sans ViewModel au moment de la conception
seront dcrites.
6. 1. Une
quoi?
Dfinir quels sont les lments constitutifs dune vue et surtout o placer
le code correspondant est un terrain glissant. Cest en effet un sujet qui fait
souvent dbat lorsque lon aborde le pattern MVVM.
Tout comme son anctre Delphi, le framework .NET utilise de faon massive
des fichiers que lon appelle le code-behind pour reprsenter le code relatif
aux interfaces graphiques. Ceci est valable pour les technologies web (ASP,
ASP.NET), comme pour les technologies de clients lourds et lgers (WPF,
Silverlight, Windows Phone 7). Le concept est quune interface graphique
est subdivise en deux parties: une relative aux lments graphiques et leur
disposition et une autre relative la gestion des vnements et linteraction
avec les autres composants techniques de lapplication (les services daccs aux donnes et les ViewModels en particulier). Le code-behind est cette
deuxime partie : il est cach, labri, derrire les lments graphiques et
cest, en quelque sorte, lintelligence de la vue. La partie graphique, quant
elle, est reprsente dans notre cas dans le format XAML dans le fichier
homonyme. Dans Visual Studio, ces deux fichiers vont de pair, le code-behind
porte lextension .xaml.cs et le fichier XAML porte lextension.XAML.
Lillustration 6-1 prsente une transposition dans le monde rel de ces deux
fichiers.
7
dition de contrles
personnaliss
Les chapitres prcdents se sont attachs dcrire les trois parties du pattern
MVVM: le modle, le ViewModel et finalement la vue. Ce chapitre va quant
lui sattarder plus en profondeur sur la cration de contrles personnaliss
compatibles avec MVVM.
Ce sujet relve plus de la bonne connaissance du framework (WPF, Silverlight
ou Windows Phone) quuniquement de la bonne comprhension de ce
pattern. Cependant, les diffrentes rgles principales respecter pour faciliter lutilisation de contrles personnaliss dans le cadre de MVVM vont tre
prsentes.
Dans un premier temps, les bonnes pratiques seront prsentes de faon
thorique sous la forme de rappels. Elles seront ensuite illustres par un
exemple pratique : la cration dun contrle indiquant lutilisateur quun
traitement est en cours. Cet exemple permettra de prsenter un un les diffrents choix raliser ainsi que les lments nous ayant permis de les faire.
245
7. 1. Cration
de contrles
personnaliss
7. 1. 1. Bien
La premire chose faire est de bien choisir la classe de base utiliser pour le
nouveau contrle raliser. En effet, en fonction de celle-ci plusieurs comportements dj prsents dans le framework pourront tre rutiliss sans dveloppement supplmentaire. Voici les diffrents contrles disponibles (tous
hritent de DependencyObject):
2 2 Control : cest la classe de base prsentant le moins de fonctionnalits par dfaut, mais cest aussi celle donnant le plus de libert. Les
lments suivants drivent tous de cette classe. Il faut donc la choisir
lorsquils ne rpondent pas aux besoins du contrle dvelopp.
8
MVVM et testabilit
Ce chapitre a pour objectif de dmontrer quelle est limportance des tests
dans lapplication du pattern MVVM, ainsi que la manire de les mettre en
pratique. Attention, tant donn quil ne sagit pas l dun livre sur la ralisation de tests, tous les points ne seront pas abords, mais uniquement ceux
qui font sens dans le cadre de lutilisation de MVVM.
8. 1. Limportance
des tests
8 MVVM et testabilit
272
mieux vous rendre compte de quel type de tests nous parlons lorsque nous
les aborderons dans le cadre de MVVM.
8. 1. 1. Les
tests fonctionnels
Les tests fonctionnels sont excuts par des personnes qui ne sont pas des
techniciens et dont le rle est de sassurer que les fonctionnalits de lapplication ont correctement t implmentes dun point de vue mtier. Ainsi,
cest le rle des testeurs fonctionnels de vrifier que lorsque lutilisateur va
cliquer sur un bouton, une grille sera correctement remplie (avec les bonnes
donnes) et quune bote de dialogue sera bien propose lutilisateur.
En cas dchec dun test fonctionnel, il nest pas de leur responsabilit de
savoir pourquoi les donnes remontes ou affiches ne sont pas correctes:
ils se contentent de drouler un scnario de tests, deffectuer des tests de
non-rgression et dindiquer si le test sest correctement droul ou non.
Les tests de non-rgression permettent, entre deux versions dune application, de sassurer que les fonctionnalits prsentes dans la V1 sont
toujours prsentes dans la V2 et quelles fonctionnent sans problmes.
Les tests fonctionnels sont donc trs pratiques et permettent aux testeurs/
dveloppeurs de se mettre, lespace dun instant, la place de lutilisateur
final, afin de pouvoir se rendre compte des points forts, des points faibles,
etc., de lapplication. Cest dailleurs bien souvent un utilisateur final qui
effectue ces tests car cest lui qui a bien souvent la meilleure connaissance
des besoins de lapplication.
8. 1. 2. Les
tests unitaires
Les tests unitaires vont permettre aux dveloppeurs de sassurer de la cohrence des donnes prsentes dans lapplication. Alors que le testeur fonctionnel a pu remarquer que les donnes remontes ne sont pas correctes (pas
le bon nombre denregistrements, etc.), cest au dveloppeur, avec ses tests
unitaires, de vrifier et comprendre do provient cette inexactitude.
9
Glossaire
Binding
En franais liaison , un binding correspond un lment frquemment
utilis dans les frameworks WPF et Silverlight. Il permet de synchroniser la
valeur des proprits de deux objets : la source et la cible. Il dfinit un lien
entre ces deux lments sans ncessairement que ceux-ci ne se connaissent:
on parle alors de couplage faible.
Contrle
Un contrle est un lment graphique rutilisable dans une interface
graphique. Le framework .Net en fournit toute une panoplie, tels que les
champs textes, les images, etc., mais il est tout fait possible den crer de
nouveaux. Une vue dune application est ainsi compose de ces contrles
disposs les uns cts des autres.
Design Pattern
On appelle Design Pattern un patron de conception, cest--dire une solution de gnie logiciel permettant de rsoudre un problme rcurrent dans le
cadre de la programmation. Un Design Pattern peut tre considr comme
une recette de cuisine.
9 Glossaire
290
Injection de dpendances
Linjection de dpendances est un mcanisme permettant de mettre en
place linversion de contrle. Cela consiste fournir les dpendances entres
les diffrentes classes par rapport un fichier de configuration ou suivant
certaines rgles de localisation. Les ressources sont fournies de lextrieur
vers le demandeur.
Localisateur de services
Le localisateur de services sutilise conjointement avec linjection de dpendances. Cest un mcanisme permettant dobtenir une ressource. la diffrence de linjection de dpendances, cest le demandeur qui rclame explicitement ce dont il a besoin.
MVVM
Cest un acronyme anglais signifiant Model View Model. En lisant ce livre, vous
aurez une bonne ide de ce que cest concrtement.
Ressources
On dsigne par ressources tout objet disponible un moment donn dans
un programme. Dans les frameworks WPF et Silverlight ce sont la plupart du
temps des images, des pinceaux (Brush) ou encore des classes spcialises
(Converter, etc.).
Test unitaire
Cest un procd informatique permettant de sassurer du bon fonctionnement dun extrait de code. Il est appel unitaire car il permet de vrifier une
unit de code consistant en le plus petit lment de spcification vrifier.
XAML
Signifiant eXtensible Application Markup Language, le XAML est un langage
dclaratif bas sur XML permettant de dfinir une interface graphique WPF
ou Silverlight.
Index
A
BeginEdit 113
Afficher
contenu 245
informations de validation 222
liste dlments 246
modle au sein des vues 27
Blendabilit 47
BooleanToVisibilityConverter 199
Appels asynchrones 95
Approches de MVVM 42
Bubbling 248
ButtonBase 202
Assembly 83
Assert 284
AsyncReponse 98
Caliburn 10
CaliburnMicro 17
AutoEdit 276
CallMethodAction 207
AutoMapper 77
CancelEdit 113
CanExecute 149, 202
CanExecuteChanged 149
Index
Cast 126
CategoriesListViewModel 137
Control 245
ChargerItems 277
Contrles 289
choix 35
de mise en attente 256
Cinch 17
ClassCleanup 278
Classe de base du modle client 72
ClassInitialize 277
Code-behind 15, 45, 167
utilit 169
Coded UI Test 285
Collections
mise en forme 231
synchronisation 221
CollectionViewSource 143
Command 94, 201, 202
Commandes 149. Voir aussiActions
classiques 254
exemple concret 153
implmenter 150
routes 251
sur des contrles graphiques classiques 202
systme 148
amliorer 155
CommandParameter 202
CommandTarget 202
Communication entre ViewModels 156
exemple concret 162
Composition 127
Construire les vues 166243
Construire un ViewModel 120
D
Data-Centric 60
DataContext 45, 180
ContentControl 245
DataTemplate 183
implicites 61
ContentPresenter 259
DataTriggers 232
Cider 238
292
Index
d:DataContext 238
EntityFramework 71, 86
d:DesignData 239
Enum 225
d:DesignInstance 239
EnumToDescriptionConverter 226
Dclencheur 207
Ergonomie 44
Dfinir le modle
client 75
global 68
hritage 71
Delegate 248
DeliverEvent 215
DependencyObject 122
Design 45
Design Pattern 289
Design time 47, 238
Dveloppement 44
Dictionnaires 230
Donnes
de tests 241
exposer 136
filtrer 142, 144
grouper 145
trier 146
DoubleClicTrigger 209
DynamicResource 173
E
crans
fonctionnels 181
prdfinis dinteraction 186
vnements
classiques 250
contrles personnaliss 248
coute 209
faibles 215
routs 248
EventArgs 248
EventManager 249
EventTrigger 207, 209
EventTriggerBase<T> 209
Execute 149
Exposer
le modle 137
les diffrentes entits 136
une action 149
Expression Blend 208
F
Fentres de dialogue 186
Filter 144
FindName 255
Fowler, Martin 10
Frameworks 16
lments du pattern 23
Gossman, John 11
Encapsulation 138
GoToState 236
EndEdit 113
293
Index
H
HeaderedContentControl 245, 258
Hritage de ViewModels 124
Hyperlink 202
294
ICategorieService 277
internal 250
ICollectionView 143
ICommand 149, 150
ICommandSource 201
IoC 52
IsDesignTimeCreatable 239
IServiceBase<> 84
IEditableObject 113
ItemsControls 246
IList<> 85
ItemsSyncher 218
IMedia 71
ItemSyncher 220
IMessenger 160
IValueConverter 199
IMultiValueConverter 199
Indexer 230
IsSynchronizedWithCurrentItem 197
InitialisationDesServices 277
KeyDownManager 215
INotifyCollectionChangedWeakEventManager 218
LocalCanExecuteEvent 155
InputBinding 202
InputsBindings 203
Index
Modle
acteurs 27
client 25, 65
classe de base 72
crer 72
dfinir 75
valeurs 113
client/consommateur 194
construire 64119
de donnes 22, 24, 65
rle 24
de la vue 22
de prsentation 25
exposer 137
global 65
dfinir 68
tests 274
utilisation par
la vue 26
le ViewModel 26
utiliser 222
Model First 59
avantages 61
dfinition 59
implmenter 59
inconvnients 61
type dapplications 60
Modlisation de la vue 36
Model-View-Controller 11
Model-View-Presenter 13
Model-View-ViewModel 9
MoveCurrentTo 147
MoveCurrentToFirst 147
MoveCurrentToNext 147
MoveCurrentToPrevious 147
Multi-threading 134
MVC 11
MVP 13
MVVM 290
appliquer 42
approches 42
choisir 62
avantages et particularits 38
code-behind 15
contrles, choix 35
lments 23
fonctionnalits 18
frameworks 16
objectifs du projet 14
philosophies 42
choisir 62
prrequis 19
prsentation 921
MVVM Light Toolkit 17
295
Index
Ramora 210
avantages 211
implmenter 212
NInject 52
Objets
appeler une mthode sur 207
mtiers
reprsentation 183
OnApplyTemplate 254, 264
OneTime 193
OneWay 193
OneWayToSource 193
Rgression 273
RelayCommand 150
Repository 83
Reprsentations graphiques du
modle de prsentation 183
ResourceDictionary 173
Ressources graphiques 290
emplacement 174
transverses 172
types de 173
Passive View 14
RoutedEvent 249
Philosophies 42
RoutedEventArgs 248
Runtime 47
POCO 69
Presentation Model 10
Presenter 13, 31
SelectedItem 217
Prism 17
SelectedItemsSyncher 218
SelectionChangedWeakventManager 218
PropertyChanging 73
Proprits de dpendance
contrles personnaliss 247
R
RAD 60
RadioButton 202
RaisePropertyChanged 73
Ramasse-miettes 161
296
Index
297
Silverlight 281
Silverlight Test Class 282
SortDescriptions 146
Spring 52
ThreadPool 98
StartListening 215
Thread UI 95
StaticResource 173
ToggleButton 202
StopListening 215
Top Down 43
String.Empty 81
Supervising Controller 14
Transitions
avec animations 233
sans animation 232
SynchronizationContext 97
Trigger 207
System.ComponentModel.
DataAnnotations 104
TryValidateProperty 106
TwoWay 193
TabControl 179
TestClass 284
Unit Of Work 92
implmenter dans les services 93
TestCleanup 278
Unity 52
TestInitialize 278
Smalltlak 11
Smith, Josh 159
TestMethod 284
Tests 271
de non-rgression 272
fonctionnels 272
interfaces graphiques 273
Modle 274
unitaires 272
bouchons 280
initialiser 276
ViewModel 275
Tunneling 248
Types particuliers 225
V
Valeurs du modle client 113
Valeurs numres 225
ValidatesOnDataErrors 222
Validation des donnes 100
fonctionnelle 110
format 101
types de 100
Index
298
archirecture 171
catgories 172
construire 166243
dfinition 167
matre/dtails 182
manipulable en XAML 48
naviguer entre 58
rles 30
sans ViewModel concret 238
ViewModel et 31
Validation.HasError 223
Validation, informations de 222
Validator 106
View 22
View First 43
avantages 48
dfinition 43
implmenter 45
inconvnients 49
instanciation des objets 44
tests unitaires 50
ViewModel 22, 36
acteurs 40
architecture et relation 121
classe de base 121
communication 156
construire 120
fonctionnalits 129
hritage 124
rles 36
utilisation simple 193
ViewModelBase 121
ViewModel First 51
avantages 56
dfinition 51
implmenter 52
inconvnients 56
type dapplications 58
ViewModelLocator 46, 177
alternative 47
VisualStateManager 234
W
WeakAction 161
WeakEventListener 215
WeakEventManager 215
WeakEvents 215
WeakReference 161
Web Forms 21
Window 188
Windows Forms 20
Windows Phone
tests 274
Workarounds 62
WPF
tests 275
Wrapping 80
avantages 80
inconvnients 80
X
XAML 45, 168, 290
x:Code 170
x:Key 173
x:Shared 48