Universal app ma universal per davvero

41
Universal App ma universal per davvero Carlo Fedeli [email protected] @cafedo84 Sponsored by 10 marzo 2016 Relatore

Transcript of Universal app ma universal per davvero

Page 1: Universal app ma universal per davvero

Universal Appma universal per davvero

Carlo [email protected]

@cafedo84

Sponsored by

10 marzo

2016

Relatore

Page 2: Universal app ma universal per davvero

2/34Domanda

Page 3: Universal app ma universal per davvero

2/34Domanda

Page 4: Universal app ma universal per davvero

3/34Approccio 1

Page 5: Universal app ma universal per davvero

4/34Approccio 2

Analizzare la situazione con l’occhio del dev .NET

Page 6: Universal app ma universal per davvero

5/34Analizzare la situazione• Capisco cosa l’applicazione deve fare

• Raccolgo la logica di business in una .dll (o più)• No alla frammentazione

• Cerco di portarla su tutte le piattaforme possibili• Il business deve essere slegato dalle logiche UI

Page 7: Universal app ma universal per davvero

6/34Problema

• Class library (.dll) specifiche di una piattaforma non possono essere referenziate

• Quindi faccio copia/incolla di codice?

Page 8: Universal app ma universal per davvero

7/34Portable Class Library

• 1 Assembly => Più piattaforme

• Codice centralizzato

• PCL è un sottoinsieme di .NET

Page 9: Universal app ma universal per davvero

8/34Portable Class Library

Page 10: Universal app ma universal per davvero

9/34Portable Class Library

Page 11: Universal app ma universal per davvero

10/34

Problema

Page 12: Universal app ma universal per davvero

10/34

Problema

Page 13: Universal app ma universal per davvero

11/34

Ecosistema Microsoft

Page 14: Universal app ma universal per davvero

11/34

Ecosistema Microsoft

Page 15: Universal app ma universal per davvero

11/34

Ecosistema Microsoft

Steve BallmerSatya Nadella

Page 16: Universal app ma universal per davvero

12/34Approccio Windows 8.1

• Un progetto condiviso, due progetti specifici per Windows e Windows Phone

• Compilazione condizionale per gestire le differenze tra le piattaforme

• Due differenti pacchetti

Page 17: Universal app ma universal per davvero

13/34Approccio Windows 8.1

#if WINDOWS_APP ResourceLoader loader = new ResourceLoader(); string about = loader.GetString("SettingsLabel/Text"); string privacy = loader.GetString("PrivacySettings/Text"); string options = loader.GetString("Settings/Text"); ISettingsService settings = container.RegisterSettingsService(); settings.RegisterFlyoutCommand<AboutViewModel>(about); settings.RegisterFlyoutCommand<PrivacyPolicyViewModel>(privacy); settings.RegisterFlyoutCommand<SettingsViewModel>(options);#endif

Page 18: Universal app ma universal per davvero

14/34Universal Windows Platform

• E’ una collezione di contratti ed estensioni, basata sul Windows Runtime

• Quando si crea un’applicazione si sceglie come riferimento una versione della UWP, non del sistema operativo

Page 19: Universal app ma universal per davvero

15/34Un pacchetto per tutti i dispositivi• Scompaiono il progetto condiviso e i

progetti specifici per ogni piattaforma

• Niente più compilazione condizionale

• Un unico Store per tutte le piattaforme

• La Universal Windows Platform è disponibile su ogni dispositivo basato su Windows 10

Page 20: Universal app ma universal per davvero

16/34Universal Windows Platform

Page 21: Universal app ma universal per davvero

17/34

Problema

Page 22: Universal app ma universal per davvero

17/34

Problema

Page 23: Universal app ma universal per davvero

Approccio classico 18/34• Vantaggi

• Focus sulla piattaforma

• Applicazioni native (performance)

• Svantaggi

• Multiple code base

• Frammentazione• 3 codebase diverse• No codice condiviso

• Ciao ciao PCL..

• Lento quindi costoso

Page 24: Universal app ma universal per davvero

HTML 19/34• Vantaggi

• Un unico linguaggio per lo sviluppo

• Condivisione codice• PCL lato server

• Sfrutto le skill che ho già

• Svantaggi

• Frammentazione WebBrowser

• Look&feel web non nativo

• Abbastanza limitata

Page 25: Universal app ma universal per davvero

XAMARIN 20/34

Tutto quello che si può sviluppare in Objective-C, Swift, o Java può essere implementato anche usando C# with Xamarin using

Visual Studio

Page 26: Universal app ma universal per davvero

Performance native 21/34

Page 27: Universal app ma universal per davvero

22/34

Page 28: Universal app ma universal per davvero

23/34

Page 29: Universal app ma universal per davvero

24/34Approccio standard• L’interfaccia utente viene realizzata

sfruttando i tool nativi (Storyboard in iOS, AXML in Android)

• Accesso a tutte le API native della piattaforma

• Richiede una buona conoscenza delle due piattaforme

• Tramite le Portable Class Library, condividiamo la logica di business

Page 30: Universal app ma universal per davvero

25/34Approccio standard - AndroidIn Xamarin, ogni pagina è una Activity composta da:

• Un file XML, che descrive il layout (può essere fatto anche da codice)

• Una classe, che gestisce le interazioni con la Activity

Page 31: Universal app ma universal per davvero

26/34Approccio standard - AndroidE’ possibile accedere ai controlli tramite un ID

• Viene assegnato un ID nell’XML

• Il processo di build genera una risorsa

• Si sfrutta la risorsa per accedere al controllo

Page 32: Universal app ma universal per davvero

27/34Approccio standard - IOS• Basato sul pattern MVC

• Ogni applicazione ha uno Storyboard, ovvero la rappresentazione visuale di tutte le schermate dell’app

• Ogni schermata è una scene

• Ogni scene è composta da una View (il layout) e da un ViewController, che ne gestisce le interazioni

Page 33: Universal app ma universal per davvero

28/34Approccio standard - IOS• Le storyboard e la

navigazione tra una scene e l’altra vengono creati direttamente nel designer di Xamarin

• Il design richiede il collegamento con un Mac

Page 34: Universal app ma universal per davvero

29/34Approccio Xamarin.Forms

Page 35: Universal app ma universal per davvero

30/34Approccio Xamarin.Forms• Mi permette di condividere non solo la logica di business, ma

anche l’interfaccia utente.

• Linguaggio per la UI basato su XAML: i controlli XAML vengono convertiti in controlli nativi a runtime.

• Supporta le caratteristiche principali dello XAML: binding, dependency property, trigger, behavior, etc.

• Non è lo stesso XAML di Microsoft: molti punti in comune, ma nomi diversi per alcuni controlli e proprietà

Page 36: Universal app ma universal per davvero

31/34Approccio Xamarin.Forms

<DatePicker />

Page 37: Universal app ma universal per davvero

32/34Approccio Xamarin.Forms• SI• Devo creare il prototipo di un’applicazione per un cliente o

per una demo• Devo creare un’applicazione di business• Non voglio imparare tutte le specifiche di ogni singola

piattaforma

• No• La mia applicazione è fortemente integrata con feature

specifiche della piattaforma.• La mia applicazione deve avere UI differenti per ogni

piattaforma.

Page 38: Universal app ma universal per davvero

33/34Xamarin Platform

Page 39: Universal app ma universal per davvero

34/34

Problema

Page 40: Universal app ma universal per davvero

34/34

Problema

Page 41: Universal app ma universal per davvero

?Domande?