unofficial xamarin day domusdotnet

Post on 16-Apr-2017

56 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

9 Settembre 2016

Xamarin Solution Architectures: PCL Vs. SharedGaetano Paternòtanopaterno@gmail.com@tanopaterno

9 Settembre 2016

Agenda

• Shared project• PCL e DependencyService• Gestire le differenze• I Custom Renderer• .NET Standard Library

9 Settembre 2016

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)

9 Settembre 2016

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

9 Settembre 2016

Shared ProjectPer gestire le differenze tra le piattaforme si utilizza la compilazione condizionale, come nelle Universal Windows apppublic 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}

9 Settembre 2016

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

9 Settembre 2016

DemoShared Project

9 Settembre 2016

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 Settembre 2016

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

9 Settembre 2016

DependencyService

Portable Class Library

INetworkService

NetworkService

NetworkService

NetworkService

[assembly: Dependency(typeof(NetworkService))]

9 Settembre 2016

Portable Class Library e DependencyService

9 Settembre 2016

Gestire le differenzeXamarin 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()

9 Settembre 2016

Le differenze nel layout

<Label> <Label.FontSize> <OnPlatform x:TypeArguments="x:Double" WinPhone="20" iOS="25" Android="30" /> </Label.FontSize></Label>

9 Settembre 2016

Gestire le differenze

9 Settembre 2016

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

9 Settembre 2016

CustomRenderer

Portable Class Library

CustomLabel

CustomLabelRenderer

CustomLabelRenderer

CustomLabelRenderer

[assembly: ExportRenderer(typeof(CustomLabel), typeof(CustomLabelRenderer))]

9 Settembre 2016

CustomRenderer

9 Settembre 2016

.Net Standard Library

9 Settembre 2016

.Net Standard Library

9 Settembre 2016

.Net Standard Library

9 Settembre 2016

.Net Standard Library

9 Settembre 2016

Creating Mobile Apps with Xamarin.Forms Book

• https://developer.xamarin.com/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/

9 Settembre 2016

Visual Studio Dev Essentials

• https://www.visualstudio.com/products/visual-studio-dev-essentials-vs

9 Settembre 2016

Question time

• Shared project• PCL e DependencyService• Gestire le differenze• I Custom Renderer• .NET Standard Library

top related