Réutilisation de code entre windows 8 et windows phone 8
1. Réutilisation de code entre
Windows 8 et Windows Phone 8.
Arnaud Auroux
Etienne Margraff
Code / Développement
#infinitesquare
www.infinitesquare.com
2. INFINITE SQUARE
STAND44ESPACE WINDOWS8& EXPÉRIENCESNUMÉRIQUES
GOLD Certified Partner
sur 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.
3. • 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
4. • 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 ?
5. La plateforme Windows 8
Windows Kernel Services
JavaScriptC/C++ C#, VB
Windows Store Apps
Windows Runtime APIs
Communication
& Data
Application Model
Devices &
Printing
Graphics &
Media
XAML HTML / CSS
HTML
JavaScript
C
C++
C#
VB
Desktop Apps
Win32
.NET
SL
Internet
Explorer
SystemServicesView
Model
Controller
Kernel
6. Windows Phone 8 API
Graphics Audio Media
File System Networking Input
Commerce Base Types Sensors
Common
.NET FX
CoreCLR
Direct3D
Interop
C++
Reuse
La plateforme Windows Phone 8
7. 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
……
8. • 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é
9. Le pattern MVVM
Views
(XAML / Code Behind)
ViewModels
(C#|C++|VB.NET, Binding, INotifyPropertyChanged, ICommands)
Models
(C# - orienté métier, interface avec la couche d’accès aux données)
HardwareOS Data
Binding
Async
11. 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
ViewsViews
Code partagé
- Patterns
- PBL
- Compilation
conditionnelle
- Add as link
- …
Models
ViewModels
12. • 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 »
13. • 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
14. La Portable Library
App Windows Store
Startup
Views
Fonctionnalités
spécifiques
App Windows Phone
Startup
Views
Fonctionnalités
spécifiques
Portable Class Library
View Models
Models
Abstraction des
spécificités
Référence Référence
16. • 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é
17. Partager du code existant
La solution : Le Pattern Adaptor
Masquer 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()
…
18. Partager une logique identique
La solution : Le Pattern Bridge
Masquer une implémentation avec une interface générique
+ function()
- impl: Implementor
Abstraction
+ implementation()
Implementor
…
a.impl.implement
()
…
+ implementation()
ConcreteImplementor
+ impl: Implementor
+ refinedFunction()
RefinedAbstraction
21. • 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 link
Projet W8
Projet Wp8
Fichier
partagé
23. 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
24. Les Ressources
• Série d'articles de Pierre Cauchois sur le
portage d'applications :
– http://bit.ly/Kkh0KL
• La série de Stephanie Hertrich sur la portable
library :
– http://bit.ly/J8DmA7