22 Model-View-ViewModel et testabilité pour WPF/Silverlight Richard Clark Clark Ingénierie Informatique Simon Ferquel Access It
33 Clark Ingénierie Informatique Livres chez Microsoft Press Expert CodeFluent RIP! Expertise.NET
44 Access It en quelques mots… Consulting/expertise, réalisation (projet /assistance technique) et formation (CPLS) sur les technologies Microsoft Haut niveau de certification 2 agences à Lille et Paris, couverture nationale Centre des Usages pour la région Nord 3 grands domaines dexpertise technologique Plateforme applicative : SharePoint, SQL Server & BI, BizTalk.Net : architecture, Framework & langages, RIA/RDA (Silverlight, WPF, Surface), industrialisation/ALM (TFS/VSTS)… Infrastructure : poste de travail, serveurs, virtualisation, messagerie, annuaire…
55 M-V-VM : LA STAR ! Cinch MVVM Light Toolkit MVVM Helpers MVVM Foundation Caliburn Onyx Calcium nRoute Basic MVVM Framework GoodLight Ocean Nito MVVM… Prism ?
66 M-V-VM : Principes de base View ViewModel Model XAMLClasse Databinding Business Objects
77 M-V-VM Démo Mise en place
88 Testabilité - Pourquoi Testabilité réparatrice Reproduire tout bug de manière automatisée Isoler le composant fautif et à détecter précisément la cause de l ' erreur Assurer la non-régression pour la suite du projet Test Driven Development Assurer la robustesse des composants dès le départ Détecter très tôt la plupart des bugs Assurer la facilité d 'utilisation des composants
99 M-V-VM Démo
10 M-V-VM Démo Relay Command
11 Testabilité – Comment ? (1) Isolation : Etre capable de remplacer toutes les dépendances Paramètres de constructeur Injection de propriétés Appeler une fonctionnalité Valider l'état après appel Valider les communications avec les dépendances
12 Testabilité – Comment ? (2) IoC / Injection de dépendances Beaucoup d'implémentations (Unity, Castle / Windsor, Spring.Net, StructureMap…) Implémentation Microsoft : Unity
13 DI : Configuration Container.RegisterType<SocietesViewModelBase, SocietesViewModel>(); Container.RegisterType<ISocieteDAL, SocieteDAL>(new ContainerControlledLifetimeManager()); Ou fichier de configuration
14 Utilisation Appel au container public class SocietesViewModel : SocietesViewModelBase { public SocieteViewModel(ISocieteDAL dal){} } … var vm = Container.Resolve ();
15 M-V-VM Démo
16 M-V-VM Démo ViewModel « complexe » Méthodes asynchrones
17 Tester du code asynchrone Mocker un service asynchrone Comprendre le fonctionnement Begin/End Dispatcher Comprendre le principe de pompe à messages Le test doit déclencher la pompe… Mais ne doit pas la bloquer… Attention, il va y avoir des Threads ! Pour Silverlight : C'est beaucoup plus simple !
18 M-V-VM Démo
19 M-V-VM Questions ?