190 likes | 330 Views
Model- View - ViewModel et testabilité pour WPF/ Silverlight. Richard Clark Clark Ingénierie Informatique. Simon Ferquel Acces s It. Clark Ingénierie Informatique. http://www.c2i.fr. Livres chez Microsoft Press. Expertise .NET. 2001-2009 RIP!. Expert CodeFluent.
E N D
Model-View-ViewModel et testabilitépour WPF/Silverlight Richard ClarkClark Ingénierie Informatique Simon Ferquel Access It
Clark Ingénierie Informatique http://www.c2i.fr Livres chez Microsoft Press Expertise .NET 2001-2009 RIP! Expert CodeFluent
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 d’expertise 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… http://www.access-it.fr
M-V-VM : LA STAR ! Cinch MVVM Light Toolkit MVVM Helpers GoodLight Basic MVVM Framework Ocean Onyx Calcium Caliburn MVVM Foundation Nito MVVM … nRoute Prism ?
XAML Classe Databinding Business Objects M-V-VM : Principes de base View ViewModel Model
M-V-VM Démo Mise en place
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 DrivenDevelopment • 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
M-V-VM Démo
M-V-VM Démo Relay Command
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
Testabilité – Comment ? (2) • IoC / Injection de dépendances • Beaucoup d'implémentations (Unity, Castle / Windsor, Spring.Net, StructureMap…) • Implémentation Microsoft : Unity
DI : Configuration Container.RegisterType<SocietesViewModelBase, SocietesViewModel>(); Container.RegisterType<ISocieteDAL, SocieteDAL>(new ContainerControlledLifetimeManager()); • Oufichier de configuration
Utilisation • Appel au container public class SocietesViewModel : SocietesViewModelBase { public SocieteViewModel(ISocieteDAL dal){} } … var vm = Container.Resolve<SocietesViewModelBase>();
M-V-VM Démo
M-V-VM Démo ViewModel « complexe » Méthodes asynchrones
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 !
M-V-VM Démo
M-V-VM Questions ?