Réutilisation de code entre Windows 8 et Windows Phone 8.
description
Transcript of Réutilisation de code entre Windows 8 et Windows Phone 8.
Réutilisation de code entre Windows 8 et Windows
Phone 8.Arnaud AurouxEtienne Margraff
Code / Développement
#infinitesquarewww.infinitesquare.com
INFINITE SQUARE STAND 44 ESPACE WINDOWS 8 & EXPÉRIENCES NUMÉRIQUES
GOLD Certified Partnersur 4 domaines de compétences.
Agréé CIR.
Centre de formation agréé.
Infinite Square aux TechDays 2013
Société de conseil, d’expertise, de réalisation et de formation exclusivement sur les technologies de développement d’applications et la plateforme applicative Microsoft.
30 collaborateurs spécialisés sur les techno MS, dont 10 MVP.
• Pourquoi partager du code?• Comparer les deux plateformes• Organiser son code pour qu’il soit portable• Les solutions techniques pour partager le code• L’architecture au service de la portabilité
Agenda
• Gagner du temps• Homogénéiser les applications• Limiter les risques d’anomalies (un code à
tester)• Parce que c’est cool
• Mais…. C’est vraiment faisable?
Pourquoi partager du code ?
La plateforme Windows 8
Windows Kernel Services
JavaScriptC/C++ C#, VB
Windows Store Apps
Windows Runtime APIsCommunicatio
n & Data
Application Model
Devices & Printing
Graphics & Media
XAML HTML / CSS
HTMLJavaScrip
t
CC++
C#VB
Desktop Apps
Win32
.NET SL
Internet Explore
r
Syst
em
Serv
ices
Vie w
Mod
el
Con
trolle
r
Kern
el
Direct3D AppC++
XAML AppC# / VB
Windows Phone 8 API
Graphics Audio Media
File System Networking Input
Commerce Base Types Sensors
Common.NET FX
CoreCLR
Direct3DInterop
C++Reuse
La plateforme Windows Phone 8
Comprendre les différences entre les plateformes
1 ou 2 doigts pour WP8 & 2 mains/souris pour Win8
Silverlight, WinPRT pour WP8 & WinRT pour Win8
Arbitraire pour WP8 & Quand ça dépasse 50ms pour Win8
Hétérogène pour WP8 & Conditionnel pour Win8
Launchers d’app pour WP8 & Contrats pour Win8
Résolutions extrêmement variéesEcran
Ergonomie
Runtimes
Asynchronisme
Background agents
Services de l’OS
……
• Séparer les couches logiques (Vues, Métier, Accès au données…)– Le pattern MVVM
• Gérer intelligemment le code source et les ressources– Séparation des projets– Partage des fichiers– Gestionnaire de source et Versionning … TFS !
• Abstraire le hardware et l'OS– Patterns Adapter, Bridge, Factory...
La recette pour maximiser la portabilité
Le pattern MVVM
Views (XAML / Minimize Code Behind)
ViewModels (C#|C++|VB.NET, Binding Source, Implements INotifyPropertyChanged and
ICommands)
Models (C# - business oriented, interfaces with DAL)
HardwareOS Data
Binding
Async
demoMVVM EN ACTION
Le Pattern MVVM… portable!
Views (XAML / Minimize Code Behind)
ViewModels (C#|C++|VB.NET, Binding Source, Implements INotifyPropertyChanged and
ICommands)
Models (C# - business oriented, interfaces with DAL)
HardwareOS Data
Binding
Async
Windows 8 Windows Phone 8
Views Views
Code partagé
- Patterns- PBL- Compilation
conditionnelle- Add as link- …
Models
ViewModels
• Les features de .NET– Interfaces, Classes Abstraites, Méthodes d‘Extension, …
• Portable Library Tools– Multi-Targeting– Interfaces Génériques
• Directives de Préprocesseur & Compilation Conditionnelle– #if SYMBOL_DEFINI– #else – #endif
Les Ingrédients d’un code « modulaire »
• Sous-ensemble commun aux différents runtimes choisis
• Peut être référencé par n'importe quel type de projet
• Ne peut référencer que des assemblies de type Portable– Attention a la portabilité de vos dépendances
La Portable Library
La Portable Library
demoPORTABLE LIBRARY
• Solutions techniques parfois insuffisantes– Types non partagés ou différents– Implémentations complétement différentes
• Il faut limiter le code non portable• Solution fréquente : utiliser des patterns
adaptés
L’architecture au service de la portabilité
Partager du code existant
La solution : Le Pattern AdaptorMasquer une méthode ou un objet avec une classe intermédiaire
+ a: Adaptor
+ doWork()
Client
+ a: Adaptee
+ methodA()
Adaptor
+ methodB()
Adaptee
…a.methodA()…
…a.methodB()…
Partager une logique identique
La solution : Le Pattern BridgeMasquer une implémentation avec une interface générique
+ function()
- impl: Implementor
Abstraction
+ implementation()
Implementor
…a.impl.implement()…
+ implementation()
ConcreteImplementor + impl: Implementor
+ refinedFunction()
RefinedAbstraction
demoMISE EN PLACE DE PATTERNS
La Compilation Conditionnelle
WinRT et WinPRT partagent certains noms d’API
• Permet d‘écrire du code spécifique dans un fichier partagé
• Permet de visualiser facilement les différences entre les codes des plateformes
• Attention aux gestionnaires de sources
Add as a link
Projet W8
Projet Wp8
Fichier partag
é
demoET SI ON CREAIT LA VERSION WP8 ?
Conclusion : il faut un bon process de portage
Analyse des dépendances
Revue d'architecture
Passage en portable library (si possible)
Implémentation des
interfaces génériques
dans les projets
spécifiques
debugging
Les Ressources
• Série d'articles de Pierre Cauchois sur le portage d'applications : – http
://blogs.msdn.com/b/pierreca/archive/2012/05/28/strat-233-gies-et-techniques-de-partage-de-code-c-et-xaml-entre-windows-phone-et-windows-8-consumer-preview-partie-1-introduction-les-diff-233-rences-entre-les-plateformes-224-avoir-en-t-234-te.aspx
• La série de Stephanie Hertrich sur la portable library : – http
://blogs.msdn.com/b/stephe/archive/2012/05/07/partager-du-code-entre-plate-formes-gr-226-ce-224-la-portable-class-library-1-4.aspx
Accélérateur Windows
Ressources
Coaching
Visibilité
aka.ms/accelerateur-windows
Plus d’info ? RDV stand Windows 8
L’Accélérateur Windows