SlideShare une entreprise Scribd logo
1  sur  23
1
Xamarin - PCL vs STL
Aristide di Francesco
Rome 24-25 MARCH 2017
2
Di cosa parleremo
PCL vs STL
3
Cross Platform
PCL vs STL
Apache Cordova, Ionic, PhoneGap per
realizzare app ibride cross-platform in HTML5
e Javascript
Xamarine Studio, Android Studio,
Xcode, Visual Studio
4
PCL vs STL
App Ibride o Native?
Time To Market
Fluidità
Accesso API di sistema
Accesso a Hardware importante
(Geo, Camera ecc)
UX / UI
NativaIbrida
Si No
No
No
No
Si
Si
Si
Si
Non esiste un approccio migliore o peggiore di un altro
ma dipende da ciò che dobbiamo fare e in che tempi
5
Sviluppo di app native
Utilizzo di un linguaggio comune e conosciuto come C#
Utilizzo di Visual Studio
Utilizzo di Xamarin Studio
Android, iOS,Android Wear,Android Tv, Apple Watch,
WinPhone, UWP
6
Xamarin.Android Xamarin.IOS
Xamarin (C#)
Xamarin SDK IOS SDK Windows Phone
SDK
Basato su Mono, permette lo
sviluppo di app Android tramite
un wrapping delle API native in
C#
Grazie alla libreria proprietaria
MonoTouch, offre pieno
supporto allo sviluppo di app
iOS tramite un wrapping delle
API native in C#
Frameworks
7
Architettura di Xamarin
Ha un piccola porzione di codice in
C# nei progetti di ognii piattaforma
ed è necessario per inizializzare ed
eseguire l’app su ogni OS nativo
Shared C# User Interface code Using Xamarin
Forms
Shared C# App Logic
Platform Specific
Inizialitation Code
Cross Platform
UI Layer
Core Library
Offre la logica dell’applicazione e
di accesso ai dati definita in C#
È lo strato contenente tutta la UI
realizzata, ad esempio con
Xamarin.Forms definita in C#
PCL vs STL
8
PCL vs STL
In breve, l’IDE e il sistema
operativo da utilizzare
saranno legati al modello
di business previsto per la
nostra app.
IDE E SUE LIMITAZIONI
9
App
(portable)
In questo progetto andremo a
scrivere il codice condiviso di
tutta la solution compresa la
logica di business e la UI.
App.Android
In questo progetto è contenuto
il codice nativo di Android e
questo è il progetto che è
selezionato per default.
App.iOS In questo progetto è contenuto
il codice nativo di iOS.
App.UWP
In questo progetto è contenuto
il codice nativo di UWP.
PCL – Portable Class Library
PCL vs STL
10
La Dependency Injection offre le linee guida per includere le funzionalità specifiche di una piattaforma nella
nostra soluzione, fornendo un modo per implementare i pattern Strategy e/o Bridge descritti da Gang of
Four (GoF).
Android
iOS
Windows-UWP
MainActivity.cs
MainActivity.cs
MainPage.xaml.cs
Startup Class. File.
Nel progetto principale troviamo al suo
interno file App.xaml.cs. Questa classe
definisce e offre la pagina principale
dell’app ed è referenziata in ogni progetto
della soluzione attraverso le rispettive
startup class.
PCL – Portable Class Library
PCL vs STL
11
PCL – Portable Class Library
PCL vs STL
12
La creazione di un’interfaccia, INomeClasse, definita nel PCL.
L’implementazione specifica delle interfacce del PCL all’interno
dei progetti delle piattaforme di interesse e opportunamente
registrate tramite il tag [assembly]
La classe DependencyService, messa a disposizione da xamarin,
è utile per implementare i principi del DI attraverso
PCL – Portable Class Library
[assembly: Xamarin.Forms.Dependency(typeof(NomeClasse_PIATTAFORMA))]
l’invocazione del metodo specifico all’interno del codice condiviso usando il
metodo DependencyService.Get<INOMECLASSE>.Nome_Metodo
13
App.xaml.cs (clase della Portable)
Inizializzazione Xamarin.Form
namespace App2.Droid
{
[Activity(Label = "App2", Icon =
"@drawable/icon", Theme = "@style/MainTheme",
MainLauncher = true, ConfigurationChanges =
ConfigChanges.ScreenSize |
ConfigChanges.Orientation)]
public class MainActivity :
global::Xamarin.Forms.Platform.Android.FormsAppCo
mpatActivity
{
protected override void OnCreate(Bundle
bundle)
{
TabLayoutResource =
Resource.Layout.Tabbar;
ToolbarResource =
Resource.Layout.Toolbar;
base.OnCreate(bundle);
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
}
}
public partial class App : Application
{
public App()
{
InitializeComponent();
MainPage = new
App2.MainPage();
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app
resumes
}
}
PCL –Snippet Code
PCL vs STL
14
In particolare, dalla colonna di Xamarin si evince che Xamarin.iOS e Xamarin.Android
supportano tutte le caratteristiche riportate in tabella. Xamarin.Forms è quindi fortemente
limitato da Windows Phone e dalla versione del .NET Framework richiedendo così allo
sviluppatore di impiegare meccanismi più articolati per fornire servizi basilari ed essenziali
come, ad esempio, la localizzaione dell’utente.
PCL – Funzionalità supportate
PCL vs STL
Funzionalità supportate da PCLs
15
STL – SharedTemplate Library
PCL vs STL
E’ durante la compilazione che Il codice è condiviso
tra i progetti di interesse durante la
compilazione della soluzione.
16
Direttive C# al compilatore
#If #elif
#endif
Il limite di questo approccio è:
I progetti Android e iOS accedono ad una
versione del .NET framework che differisce da
quella usata per i progetti Windows.
Quindi è necessario differenziare il codice per
ogni piattaforma supportata per effettuare
l’operazione di interesse, come ad esempio
accedere a un database.
Shared Project (e i suoi layer) vengono
praticamente copiati in ogni progetto della
soluzione che lo referenzia, e viene
compilato come parte del progetto
17
PCL vs STL
STL – DirettiveC# al
compilatore
_MOBILE_
_IOS_
_ANDROID_
_ANDROID_nn_
WINDOWS_PHONE_APP
WINDOWS_PHONE_APP
Impiegato nei progetti iOS e
Android
Definito nel progetto iOS
Definito nel progetto Android
Definito per Android, dove nn rappresenta il livello delle
API per cui eseguire una particolare azione
Definito nel progetto per
Windows Phone
Utilizzato nel progetto delle UWP
#if __IOS__
// codice specifico per iOS
#elif __ANDROID__
// codice specifico per Android
#elif WINDOWS_PHONE_APP
// codice specifico per Windows Phone
… //supporto agli altri progetti
#endif
18
PCL STL
Pro
• Condivisione del codice tra progetti.
• Creazione di una DLL che può essere condivisa
in altre soluzioni.
• Refactoring del codice più semplice
• Condivisione del codice tra progetti.
• Il codice può essere gestito con le direttive del compilatore.
• Possibilità di includere referenze specifiche
Contro • Utilizzo di un sottoinsieme di funzioni del .NET
Framework limitato dalle piattaforme
supportate.
• Complessità nell’aggiungere comportamenti
specifici delle piattaforme
• La compilazione del progetto non genera un assembly come
output da referenziare in altri progetti (inclusi quelli
Shared).
• Refactoring del codice con le direttive del compilatore è più
complesso
Analisi • Se l’assembly generato deve essere condiviso
con altri sviluppatori.
• Rispetto a STL è Largamente impiegato.
• Ottimo approccio che permette una gestione più semplice
delle specifiche funzionalità delle piattaforme.
• Consigliabile se il codice non è condiviso con altri
sviluppatori ed è utilizzato solo all’interno della soluzione
PCL vs STL
STL – PCL vs STL
19
Xamarin Nativa Ibrida
Gruppo di sviluppo Singolo (C#, .NET) Un gruppo per ogni
piattaforma
Singolo (HTML5, Javascript,CSS)
Condivisione del
codice
Si, Oltre 80% No, il codice è differente
per piattaforma
Si, 100%
UI/UX Nativa della
piattaforma
Nativa della piattaforma No, una UI per tutte le piattaforme
Performances Ottime: Molto simili al
nativo
Eccellenti Medio basse
Capacità utilizzo
hardware
Alto, utilizza le API
specifiche della
piattaforma
Alto Medio, Si accede all’hardware attraverso
librerie di terze parti
Time to Market Ottimo, un gruppo di
lavoro per tutte le
piattaforme, stesso
linguaggio, stesse API
Scarso, gruppo di lavoro
differente per ogni
piattaforma, con
linguaggi differenti e
problematiche differenti.
Eccellente, un gruppo di lavoro per tutte le
piattaforme e velocità di sviluppo.
PCL vs STL
Perché Xamarin
20
Anche strumenti di sviluppo ibridi per il mobile si stanno evolvendo
rapidamente, mancano ancora le prestazioni e le funzionalità native che Xamarin
offre più o meno allo stesso costo.
Xamarin viene scelto in quanto diminuisce il time to market e i costi di
ingegneria, attraverso la condivisione del codice e utilizzando un unico gruppo di
sviluppo.
Eppure, lo scopo della app e il suo target di riferimento potrebbe essere un fattore
ancora più importante da considerare. Secondo studi, Xamarin è la migliore
soluzione per una App di tipo Aziendale, nella quale una interfaccia utente
standard che copre il 90% dei progetti la logica può essere condivisa tra le varie
piattaforme.
Nel caso di applicazioni di consumo con pesante interfaccia utente, la quantità di
codice condiviso diminuisce drasticamente. Così, Xamarin perde il suo vantaggio
importante e potrebbe essere uguale nel tempo e costi per le soluzioni native.
Perché Xamarin - Conclusioni
PCL vs STL
21
DEMO
22
23
Aristide Di Francesco Avda. de Bruselas 35
28108 Alcobendas,
Madrid España
T +34 91 480 50 00
F +34 91 480 50 80
www.minsait.com

Contenu connexe

Tendances

Mob01 mobile services e webapi
Mob01   mobile services e webapiMob01   mobile services e webapi
Mob01 mobile services e webapi
DotNetCampus
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
Fabio Cozzolino
 

Tendances (20)

Ibm bluemix r pozzi
Ibm bluemix r pozziIbm bluemix r pozzi
Ibm bluemix r pozzi
 
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
Sviluppo di soluzioni embedded moderne con .NET Micro Framework by Lorenzo Ma...
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functions
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
 
Xamarin & Cognitive Services Slides
Xamarin & Cognitive Services SlidesXamarin & Cognitive Services Slides
Xamarin & Cognitive Services Slides
 
Milano Chatbots Meetup - Vittorio Banfi - Bot Design - Codemotion Milan 2016
Milano Chatbots Meetup - Vittorio Banfi - Bot Design - Codemotion Milan 2016 Milano Chatbots Meetup - Vittorio Banfi - Bot Design - Codemotion Milan 2016
Milano Chatbots Meetup - Vittorio Banfi - Bot Design - Codemotion Milan 2016
 
Real Time Monitoring and Analitycs : Customer Experience in Production
Real Time Monitoring and Analitycs : Customer Experience in ProductionReal Time Monitoring and Analitycs : Customer Experience in Production
Real Time Monitoring and Analitycs : Customer Experience in Production
 
WSO2 MASTER CLASS ITALIA #9 - Come creare API di successo
WSO2 MASTER CLASS ITALIA #9 - Come creare API di successoWSO2 MASTER CLASS ITALIA #9 - Come creare API di successo
WSO2 MASTER CLASS ITALIA #9 - Come creare API di successo
 
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILEARCHITETTURA DI UN'APPLICAZIONE SCALABILE
ARCHITETTURA DI UN'APPLICAZIONE SCALABILE
 
Mob01 mobile services e webapi
Mob01   mobile services e webapiMob01   mobile services e webapi
Mob01 mobile services e webapi
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimization
 
Mobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web DevelopersMobile Development: una introduzione per Web Developers
Mobile Development: una introduzione per Web Developers
 
Xamarin Robotics
Xamarin RoboticsXamarin Robotics
Xamarin Robotics
 
Xamarin
XamarinXamarin
Xamarin
 
IBM Bluemix @Codemotion
IBM Bluemix @CodemotionIBM Bluemix @Codemotion
IBM Bluemix @Codemotion
 
Sviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarinSviluppo apps multipiattaforma con visual studio e xamarin
Sviluppo apps multipiattaforma con visual studio e xamarin
 
What's new in Visual Studio 2019
What's new in Visual Studio 2019What's new in Visual Studio 2019
What's new in Visual Studio 2019
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?
 

Similaire à Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - Codemotion Rome 2017

Similaire à Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - Codemotion Rome 2017 (20)

INTRO TO XAMARIN
INTRO TO XAMARININTRO TO XAMARIN
INTRO TO XAMARIN
 
Introduzione a Xamarin
Introduzione a XamarinIntroduzione a Xamarin
Introduzione a Xamarin
 
Flutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaFlutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaforma
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
 
Introduzione a .Net Core
Introduzione a .Net CoreIntroduzione a .Net Core
Introduzione a .Net Core
 
Nativo vs Xamarin pro e contro
Nativo vs Xamarin pro e controNativo vs Xamarin pro e contro
Nativo vs Xamarin pro e contro
 
Nativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e controNativo vs Xamarin: pro e contro
Nativo vs Xamarin: pro e contro
 
Costruire app per WinPhone, iOS e Android con C# e Xamarin
Costruire app per WinPhone, iOS e Android con C# e XamarinCostruire app per WinPhone, iOS e Android con C# e Xamarin
Costruire app per WinPhone, iOS e Android con C# e Xamarin
 
Sviluppare una app mobile net oriented
Sviluppare una app mobile net orientedSviluppare una app mobile net oriented
Sviluppare una app mobile net oriented
 
Meet no Neet: presentazione del progetto App per organizzare eventi
Meet no Neet: presentazione del progetto App per organizzare eventiMeet no Neet: presentazione del progetto App per organizzare eventi
Meet no Neet: presentazione del progetto App per organizzare eventi
 
Flash Platform su dispositivi mobili
Flash Platform su dispositivi mobiliFlash Platform su dispositivi mobili
Flash Platform su dispositivi mobili
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5
 
Italian C++ MeetUp - 24/10/2015
Italian C++ MeetUp - 24/10/2015Italian C++ MeetUp - 24/10/2015
Italian C++ MeetUp - 24/10/2015
 
La tua prima app per Ubuntu Touch
La tua prima app per Ubuntu TouchLa tua prima app per Ubuntu Touch
La tua prima app per Ubuntu Touch
 
EtnaDev 2015 - Windows Bridge
EtnaDev 2015 - Windows BridgeEtnaDev 2015 - Windows Bridge
EtnaDev 2015 - Windows Bridge
 
Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)Meego Italian Day 2011 - Francesco Baldassarri (1)
Meego Italian Day 2011 - Francesco Baldassarri (1)
 
platforms
platformsplatforms
platforms
 
Programmazione mobile: ANDROID
Programmazione mobile: ANDROIDProgrammazione mobile: ANDROID
Programmazione mobile: ANDROID
 
Unofficial Xamarin Day DomusDotNet
Unofficial Xamarin Day DomusDotNetUnofficial Xamarin Day DomusDotNet
Unofficial Xamarin Day DomusDotNet
 

Plus de Codemotion

Plus de Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 

Xamarin: Shared Library and Portable Class Library - Aristide Di Francesco - Codemotion Rome 2017

  • 1. 1 Xamarin - PCL vs STL Aristide di Francesco Rome 24-25 MARCH 2017
  • 3. 3 Cross Platform PCL vs STL Apache Cordova, Ionic, PhoneGap per realizzare app ibride cross-platform in HTML5 e Javascript Xamarine Studio, Android Studio, Xcode, Visual Studio
  • 4. 4 PCL vs STL App Ibride o Native? Time To Market Fluidità Accesso API di sistema Accesso a Hardware importante (Geo, Camera ecc) UX / UI NativaIbrida Si No No No No Si Si Si Si Non esiste un approccio migliore o peggiore di un altro ma dipende da ciò che dobbiamo fare e in che tempi
  • 5. 5 Sviluppo di app native Utilizzo di un linguaggio comune e conosciuto come C# Utilizzo di Visual Studio Utilizzo di Xamarin Studio Android, iOS,Android Wear,Android Tv, Apple Watch, WinPhone, UWP
  • 6. 6 Xamarin.Android Xamarin.IOS Xamarin (C#) Xamarin SDK IOS SDK Windows Phone SDK Basato su Mono, permette lo sviluppo di app Android tramite un wrapping delle API native in C# Grazie alla libreria proprietaria MonoTouch, offre pieno supporto allo sviluppo di app iOS tramite un wrapping delle API native in C# Frameworks
  • 7. 7 Architettura di Xamarin Ha un piccola porzione di codice in C# nei progetti di ognii piattaforma ed è necessario per inizializzare ed eseguire l’app su ogni OS nativo Shared C# User Interface code Using Xamarin Forms Shared C# App Logic Platform Specific Inizialitation Code Cross Platform UI Layer Core Library Offre la logica dell’applicazione e di accesso ai dati definita in C# È lo strato contenente tutta la UI realizzata, ad esempio con Xamarin.Forms definita in C# PCL vs STL
  • 8. 8 PCL vs STL In breve, l’IDE e il sistema operativo da utilizzare saranno legati al modello di business previsto per la nostra app. IDE E SUE LIMITAZIONI
  • 9. 9 App (portable) In questo progetto andremo a scrivere il codice condiviso di tutta la solution compresa la logica di business e la UI. App.Android In questo progetto è contenuto il codice nativo di Android e questo è il progetto che è selezionato per default. App.iOS In questo progetto è contenuto il codice nativo di iOS. App.UWP In questo progetto è contenuto il codice nativo di UWP. PCL – Portable Class Library PCL vs STL
  • 10. 10 La Dependency Injection offre le linee guida per includere le funzionalità specifiche di una piattaforma nella nostra soluzione, fornendo un modo per implementare i pattern Strategy e/o Bridge descritti da Gang of Four (GoF). Android iOS Windows-UWP MainActivity.cs MainActivity.cs MainPage.xaml.cs Startup Class. File. Nel progetto principale troviamo al suo interno file App.xaml.cs. Questa classe definisce e offre la pagina principale dell’app ed è referenziata in ogni progetto della soluzione attraverso le rispettive startup class. PCL – Portable Class Library PCL vs STL
  • 11. 11 PCL – Portable Class Library PCL vs STL
  • 12. 12 La creazione di un’interfaccia, INomeClasse, definita nel PCL. L’implementazione specifica delle interfacce del PCL all’interno dei progetti delle piattaforme di interesse e opportunamente registrate tramite il tag [assembly] La classe DependencyService, messa a disposizione da xamarin, è utile per implementare i principi del DI attraverso PCL – Portable Class Library [assembly: Xamarin.Forms.Dependency(typeof(NomeClasse_PIATTAFORMA))] l’invocazione del metodo specifico all’interno del codice condiviso usando il metodo DependencyService.Get<INOMECLASSE>.Nome_Metodo
  • 13. 13 App.xaml.cs (clase della Portable) Inizializzazione Xamarin.Form namespace App2.Droid { [Activity(Label = "App2", Icon = "@drawable/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)] public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCo mpatActivity { protected override void OnCreate(Bundle bundle) { TabLayoutResource = Resource.Layout.Tabbar; ToolbarResource = Resource.Layout.Toolbar; base.OnCreate(bundle); global::Xamarin.Forms.Forms.Init(this, bundle); LoadApplication(new App()); } } } public partial class App : Application { public App() { InitializeComponent(); MainPage = new App2.MainPage(); } protected override void OnStart() { // Handle when your app starts } protected override void OnSleep() { // Handle when your app sleeps } protected override void OnResume() { // Handle when your app resumes } } PCL –Snippet Code PCL vs STL
  • 14. 14 In particolare, dalla colonna di Xamarin si evince che Xamarin.iOS e Xamarin.Android supportano tutte le caratteristiche riportate in tabella. Xamarin.Forms è quindi fortemente limitato da Windows Phone e dalla versione del .NET Framework richiedendo così allo sviluppatore di impiegare meccanismi più articolati per fornire servizi basilari ed essenziali come, ad esempio, la localizzaione dell’utente. PCL – Funzionalità supportate PCL vs STL Funzionalità supportate da PCLs
  • 15. 15 STL – SharedTemplate Library PCL vs STL E’ durante la compilazione che Il codice è condiviso tra i progetti di interesse durante la compilazione della soluzione.
  • 16. 16 Direttive C# al compilatore #If #elif #endif Il limite di questo approccio è: I progetti Android e iOS accedono ad una versione del .NET framework che differisce da quella usata per i progetti Windows. Quindi è necessario differenziare il codice per ogni piattaforma supportata per effettuare l’operazione di interesse, come ad esempio accedere a un database. Shared Project (e i suoi layer) vengono praticamente copiati in ogni progetto della soluzione che lo referenzia, e viene compilato come parte del progetto
  • 17. 17 PCL vs STL STL – DirettiveC# al compilatore _MOBILE_ _IOS_ _ANDROID_ _ANDROID_nn_ WINDOWS_PHONE_APP WINDOWS_PHONE_APP Impiegato nei progetti iOS e Android Definito nel progetto iOS Definito nel progetto Android Definito per Android, dove nn rappresenta il livello delle API per cui eseguire una particolare azione Definito nel progetto per Windows Phone Utilizzato nel progetto delle UWP #if __IOS__ // codice specifico per iOS #elif __ANDROID__ // codice specifico per Android #elif WINDOWS_PHONE_APP // codice specifico per Windows Phone … //supporto agli altri progetti #endif
  • 18. 18 PCL STL Pro • Condivisione del codice tra progetti. • Creazione di una DLL che può essere condivisa in altre soluzioni. • Refactoring del codice più semplice • Condivisione del codice tra progetti. • Il codice può essere gestito con le direttive del compilatore. • Possibilità di includere referenze specifiche Contro • Utilizzo di un sottoinsieme di funzioni del .NET Framework limitato dalle piattaforme supportate. • Complessità nell’aggiungere comportamenti specifici delle piattaforme • La compilazione del progetto non genera un assembly come output da referenziare in altri progetti (inclusi quelli Shared). • Refactoring del codice con le direttive del compilatore è più complesso Analisi • Se l’assembly generato deve essere condiviso con altri sviluppatori. • Rispetto a STL è Largamente impiegato. • Ottimo approccio che permette una gestione più semplice delle specifiche funzionalità delle piattaforme. • Consigliabile se il codice non è condiviso con altri sviluppatori ed è utilizzato solo all’interno della soluzione PCL vs STL STL – PCL vs STL
  • 19. 19 Xamarin Nativa Ibrida Gruppo di sviluppo Singolo (C#, .NET) Un gruppo per ogni piattaforma Singolo (HTML5, Javascript,CSS) Condivisione del codice Si, Oltre 80% No, il codice è differente per piattaforma Si, 100% UI/UX Nativa della piattaforma Nativa della piattaforma No, una UI per tutte le piattaforme Performances Ottime: Molto simili al nativo Eccellenti Medio basse Capacità utilizzo hardware Alto, utilizza le API specifiche della piattaforma Alto Medio, Si accede all’hardware attraverso librerie di terze parti Time to Market Ottimo, un gruppo di lavoro per tutte le piattaforme, stesso linguaggio, stesse API Scarso, gruppo di lavoro differente per ogni piattaforma, con linguaggi differenti e problematiche differenti. Eccellente, un gruppo di lavoro per tutte le piattaforme e velocità di sviluppo. PCL vs STL Perché Xamarin
  • 20. 20 Anche strumenti di sviluppo ibridi per il mobile si stanno evolvendo rapidamente, mancano ancora le prestazioni e le funzionalità native che Xamarin offre più o meno allo stesso costo. Xamarin viene scelto in quanto diminuisce il time to market e i costi di ingegneria, attraverso la condivisione del codice e utilizzando un unico gruppo di sviluppo. Eppure, lo scopo della app e il suo target di riferimento potrebbe essere un fattore ancora più importante da considerare. Secondo studi, Xamarin è la migliore soluzione per una App di tipo Aziendale, nella quale una interfaccia utente standard che copre il 90% dei progetti la logica può essere condivisa tra le varie piattaforme. Nel caso di applicazioni di consumo con pesante interfaccia utente, la quantità di codice condiviso diminuisce drasticamente. Così, Xamarin perde il suo vantaggio importante e potrebbe essere uguale nel tempo e costi per le soluzioni native. Perché Xamarin - Conclusioni PCL vs STL
  • 22. 22
  • 23. 23 Aristide Di Francesco Avda. de Bruselas 35 28108 Alcobendas, Madrid España T +34 91 480 50 00 F +34 91 480 50 80 www.minsait.com