Réutilisation de code entre
     Windows 8 et Windows Phone
                                 8.
                    Arnaud Auroux
                 Etienne Margraff
                               #infinitesquare
                       www.infinitesquare.com


Code / Développement
INFINITE SQUARE
  STAND 44 ESPACE WINDOWS 8 & EXPÉRIENCES NUMÉRIQUES

   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.




   GOLD Certified Partner
    sur 4 domaines de compétences.
   Agréé CIR.
   Centre de formation agréé.
Infinite Square aux TechDays 2013
Agenda
•   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é
Pourquoi partager du code ?
•   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?
La plateforme Windows 8
                             Windows Store Apps                         Desktop Apps
  View




                             XAML                       HTML / CSS
Controller




                     C/C++            C#, VB            JavaScript
 Model




                                                                      HTML         C      C#
                                                                      JavaScrip   C++     VB
                             Windows Runtime APIs                         t
  System Services




                    Communication      Graphics &         Devices &
                       & Data            Media             Printing

                                    Application Model                 Internet            .NET
                                                                      Explorer    Win32    SL
   Kernel




                                       Windows Kernel Services
La plateforme Windows Phone 8

                                   Direct3D      C++
                                    Interop     Reuse

                     Windows Phone 8 API
                                              Common
      Graphics       Audio        Media
                                              .NET FX

     File System   Networking      Input
                                              CoreCLR
     Commerce      Base Types    Sensors
Comprendre les différences entre les
plateformes
      Ecran                 Résolutions extrêmement variées

   Ergonomie        1 ou 2 doigts pour WP8 & 2 mains/souris pour Win8

    Runtimes         Silverlight, WinPRT pour WP8 & WinRT pour Win8

                    Arbitraire pour WP8 & Quand ça dépasse 50ms pour
 Asynchronisme
                                           Win8

Background agents    Hétérogène pour WP8 & Conditionnel pour Win8

 Services de l’OS    Launchers d’app pour WP8 & Contrats pour Win8
        …                                  …
La recette pour maximiser la portabilité
• 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...
Le pattern MVVM
                                       Views
                            (XAML / Minimize Code Behind)


                                                 Binding

                                 ViewModels
        (C#|C++|VB.NET, Binding Source, Implements INotifyPropertyChanged and
                                     ICommands)

                                                 Async

                                     Models
                      (C# - business oriented, interfaces with DAL)




          OS                       Hardware                           Data
MVVM EN ACTION
Le Pattern MVVM… portable!
    Windows 8                     Views
                               Code partagé                    Windows Phone 8
                              (XAML / Minimize Code Behind)


                               - Patterns Binding
                               - PBL
                                    ViewModels
                               - Compilation INotifyPropertyChanged and
            (C#|C++|VB.NET, Binding Source, Implements
      Views                              ICommands)
                                   conditionnelle                       Views
                               - Add as link
                                                   Async
                               - …
                                        Models
                                   ViewModels with DAL)
                         (C# - business oriented, interfaces



                                    Models
                OS                  Hardware                   Data
Les Ingrédients d’un code « modulaire »
• 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
La Portable Library
• 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
PORTABLE LIBRARY
L’architecture au service de la portabilité
• 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
Partager du code existant
La solution : Le Pattern Adaptor
Masquer une méthode ou un objet avec une classe intermédiaire

            Client         Adaptor          Adaptee
        + a: Adaptor     + a: Adaptee
                                           + methodB()
        + doWork()       + methodA()




           …                 …
           a.methodA()       a.methodB()
           …                 …
Partager une logique identique
La solution : Le Pattern Bridge
Masquer une implémentation avec une interface générique

                      Abstraction             Implementor
                      - impl: Implementor
                      + function()          + implementation()
   …
   a.impl.implement
   ()
   …
                      RefinedAbstraction    ConcreteImplementor
                      + impl: Implementor
                      + refinedFunction()   + implementation()
MISE EN PLACE DE PATTERNS
La Compilation Conditionnelle



                           WinRT et WinPRT
                           partagent certains
                           noms d’API
Add as a link
• 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
                             Projet W8

         Fichier
         partagé             Projet Wp8
ET SI ON CREAIT LA VERSION
WP8 ?
Conclusion : il faut un bon process de
portage

                                                   Implémentation
                                 Passage en         des interfaces
 Analyse des       Revue
                                portable library     génériques       debugging
dépendances    d'architecture
                                 (si possible)     dans les projets
                                                     spécifiques
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
L’Accélérateur Windows
                Ressources
                Coaching
                Visibilité

                        aka.ms/accelerateur-windows

                         Plus d’info ? RDV stand Windows 8
Accélérateur Windows

Réutilisation de code entre Windows 8 et Windows Phone 8.

  • 1.
    Réutilisation de codeentre Windows 8 et Windows Phone 8. Arnaud Auroux Etienne Margraff #infinitesquare www.infinitesquare.com Code / Développement
  • 2.
    INFINITE SQUARE STAND 44 ESPACE WINDOWS 8 & EXPÉRIENCES NUMÉRIQUES  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.  GOLD Certified Partner sur 4 domaines de compétences.  Agréé CIR.  Centre de formation agréé. Infinite Square aux TechDays 2013
  • 3.
    Agenda • 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é
  • 4.
    Pourquoi partager ducode ? • 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?
  • 5.
    La plateforme Windows8 Windows Store Apps Desktop Apps View XAML HTML / CSS Controller C/C++ C#, VB JavaScript Model HTML C C# JavaScrip C++ VB Windows Runtime APIs t System Services Communication Graphics & Devices & & Data Media Printing Application Model Internet .NET Explorer Win32 SL Kernel Windows Kernel Services
  • 6.
    La plateforme WindowsPhone 8 Direct3D C++ Interop Reuse Windows Phone 8 API Common Graphics Audio Media .NET FX File System Networking Input CoreCLR Commerce Base Types Sensors
  • 7.
    Comprendre les différencesentre les plateformes Ecran Résolutions extrêmement variées Ergonomie 1 ou 2 doigts pour WP8 & 2 mains/souris pour Win8 Runtimes Silverlight, WinPRT pour WP8 & WinRT pour Win8 Arbitraire pour WP8 & Quand ça dépasse 50ms pour Asynchronisme Win8 Background agents Hétérogène pour WP8 & Conditionnel pour Win8 Services de l’OS Launchers d’app pour WP8 & Contrats pour Win8 … …
  • 8.
    La recette pourmaximiser la portabilité • 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...
  • 9.
    Le pattern MVVM Views (XAML / Minimize Code Behind) Binding ViewModels (C#|C++|VB.NET, Binding Source, Implements INotifyPropertyChanged and ICommands) Async Models (C# - business oriented, interfaces with DAL) OS Hardware Data
  • 10.
  • 11.
    Le Pattern MVVM…portable! Windows 8 Views Code partagé Windows Phone 8 (XAML / Minimize Code Behind) - Patterns Binding - PBL ViewModels - Compilation INotifyPropertyChanged and (C#|C++|VB.NET, Binding Source, Implements Views ICommands) conditionnelle Views - Add as link Async - … Models ViewModels with DAL) (C# - business oriented, interfaces Models OS Hardware Data
  • 12.
    Les Ingrédients d’uncode « modulaire » • 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
  • 13.
    La Portable Library •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
  • 14.
  • 15.
  • 16.
    L’architecture au servicede la portabilité • 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
  • 17.
    Partager du codeexistant La solution : Le Pattern Adaptor Masquer une méthode ou un objet avec une classe intermédiaire Client Adaptor Adaptee + a: Adaptor + a: Adaptee + methodB() + doWork() + methodA() … … a.methodA() a.methodB() … …
  • 18.
    Partager une logiqueidentique La solution : Le Pattern Bridge Masquer une implémentation avec une interface générique Abstraction Implementor - impl: Implementor + function() + implementation() … a.impl.implement () … RefinedAbstraction ConcreteImplementor + impl: Implementor + refinedFunction() + implementation()
  • 19.
    MISE EN PLACEDE PATTERNS
  • 20.
    La Compilation Conditionnelle WinRT et WinPRT partagent certains noms d’API
  • 21.
    Add as alink • 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 Projet W8 Fichier partagé Projet Wp8
  • 22.
    ET SI ONCREAIT LA VERSION WP8 ?
  • 23.
    Conclusion : ilfaut un bon process de portage Implémentation Passage en des interfaces Analyse des Revue portable library génériques debugging dépendances d'architecture (si possible) dans les projets spécifiques
  • 24.
    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
  • 25.
    L’Accélérateur Windows Ressources Coaching Visibilité aka.ms/accelerateur-windows Plus d’info ? RDV stand Windows 8 Accélérateur Windows

Notes de l'éditeur