Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Unofficial Xamarin Day DomusDotNet

91 views

Published on

Xamarin Solution Architectures: PCL Vs. Shared

Published in: Software
  • Be the first to comment

  • Be the first to like this

Unofficial Xamarin Day DomusDotNet

  1. 1. Xamarin Solution Architectures: PCL Vs. Shared Gaetano Paternò tanopaterno@gmail.com @tanopaterno
  2. 2. Agenda • Shared project • PCL e DependencyService • Gestire le differenze • I Custom Renderer • .NET Standard Library
  3. 3. Shared or Portable Portable Class Library or Shared Project C# Platform Specific C# Platform Specific C# Platform Specific Shared C# Interface Code (Xamarin.Forms) Shared C# App Logic (ViewModels, Models etc)
  4. 4. Shared Project • Un tipo di progetto speciale, che non produce una DLL in fase di compilazione • I file contenuti al suo interno vengono replicati nei singoli progetti, con il meccanismo dei link di Visual Studio • Stesso meccanismo usato nelle Universal Windows app per condividere codice tra Windows e Windows Phone
  5. 5. Shared Project Per gestire le differenze tra le piattaforme si utilizza la compilazione condizionale, come nelle Universal Windows app public void DoSomething() { #if WINDOWS_PHONE //utilizzo le API di Windows Phone #endif #if __ANDROID__ //utilizzo le API di Android #endif #if __IOS__ //utilizzo le API di iOS #endif }
  6. 6. Shared Project Nell’ambito Xamarin Forms, sconsiglio questo approccio perché rende il codice poco comprensibile e difficile da leggere, soprattutto in caso di utilizzo di molte API differenti
  7. 7. Demo Shared Project
  8. 8. Portable Class Libraries (PCL) • Il progetto produce una libreria DLL, compatibile con tecnologie differenti (Windows, Windows Phone, Xamarin, ecc.) • Supporta il set di API minimo condivisibile tra le piattaforme selezionate • Non è possibile utilizzare la compilazione condizionale
  9. 9. DependencyService • Si crea un’interfaccia nel progetto condiviso, che espone i metodi comuni tra tutte le piattaforme • Si crea un’implementazione dell’interfaccia specifica per ogni piattaforma, che utilizza le API di Xamarin • Tramite la classe DependencyService, si ottiene un riferimento all’implementazione specifica per la piattaforma corrente
  10. 10. DependencyService Portable Class Library INetworkService NetworkService NetworkService NetworkService [assembly: Dependency(typeof(NetworkService))]
  11. 11. Portable Class Library e DependencyService
  12. 12. Gestire le differenze Xamarin Forms offre la classe Device, che: • Permette di distinguere la piattaforma e implementare variazioni nel layout • Permette di effettuare alcune operazioni cross-platform direttamente nel progetto condiviso: • Invocare un URL -> OpenUri() • Avviare un timer -> StartTimer() • Eseguire un’operazione sul thread della UI -> BeginInvokeOnMainThread()
  13. 13. Le differenze nel layout <Label> <Label.FontSize> <OnPlatform x:TypeArguments="x:Double" WinPhone="20" iOS="25" Android="30" /> </Label.FontSize> </Label>
  14. 14. Gestire le differenze
  15. 15. CustomRenderer • E’ il meccanismo di Xamarin Forms che consente di personalizzare l’aspetto e il comportamento dei controlli in base alla piattaforma • Un controllo base, nel progetto condiviso, da utilizzare nelle pagine XAML • Una classe in ogni progetto specifico, in grado di utilizzare le API native della piattaforma
  16. 16. CustomRenderer Portable Class Library CustomLabel CustomLabelRenderer CustomLabelRenderer CustomLabelRenderer [assembly: ExportRenderer(typeof(CustomLabel), typeof(CustomLabelRenderer))]
  17. 17. CustomRenderer
  18. 18. .Net Standard Library
  19. 19. .Net Standard Library
  20. 20. .Net Standard Library
  21. 21. .Net Standard Library
  22. 22. Creating Mobile Apps with Xamarin.Forms Book • https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps- xamarin-forms/
  23. 23. Visual Studio Dev Essentials • https://www.visualstudio.com/products/visual-studio-dev-essentials-vs
  24. 24. Question time • Shared project • PCL e DependencyService • Gestire le differenze • I Custom Renderer • .NET Standard Library

×