SlideShare a Scribd company logo
WEB02 – Single Page 
Applications 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014 
Roberto Messora 
roberto@messora.com - @robymes
Grazie a 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014 
Sponsor
Agenda 
• Riassunto delle puntate precedenti 
• Riprendiamo un “paio” di concetti 
 Cosa, Perchè, Come 
 Security 
 Design Patterns 
 Unit Testing 
• Organizzare una solution 
• Build System 
 L’ecosistema di Node.JS (ma non il web server) 
 Task automation con Gulp.JS 
 Unit Testing automation con Karma 
 UI Testing automation con Phantom.JS 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Nelle puntate precedenti 
• 2012 - Javascript avanzato: sfruttare al massimo il web 
 http://bit.ly/1rooMbA 
• 2013 - Usare Knockout.js 
 http://bit.ly/1rooJwv 
• 2014 – Single Page Applications: Come? Cosa? Perchè? 
 http://bit.ly/1rooGRr 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Cosa 
• SPA è l’acronimo di Single Page (Web) Application 
• Si riferisce in genere ad un’applicazione web in cui l’intera 
esperienza utente è erogata tramite una unica pagina, 
spesso ricca di contenuti e della user experience 
• Una SPA si caratterizza per l’utilizzo di tecnologie di ultima 
generazione: 
 HTML5 
 CSS3 
 Javascript 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Perché 
• Si sceglie di sviluppare una SPA per diversi motivi: 
 Esperienza utente molto ricca (desktop-like tramite CSS3 e 
JavaScript) 
 Applicazioni più responsive e veloci grazie al massiccio 
utilizzo di chiamate AJAX 
 Migliore adattamento all’ambiente mobile anche per 
quanto riguarda il ridotto scambio di dati con il server o la 
possibilità di eseguire web app offline 
 Perchè così fan tutti… 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Come 
• Non esiste un modo univoco per sviluppare una 
SPA: 
 Decine di framework Javascript su cui è possibile basare 
una SPA (fare un giro su http://todomvc.com/ per 
rendersene conto) 
 Molteplici opzioni di tecnologia lato server: 
 Stack Microsoft ASP.NET (classico + WCF, MVC) 
 Node.JS, quasi sempre implementati come endpoint di servizi 
REST/JSON 
 Basi dati non relazionali che forniscono nativamente un 
accesso REST 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Sicurezza 
• JavaScript e sicurezza sono due concetti abbastanza distanti fra di loro 
• Usare sempre HTTPS 
• Autenticazione & Autorizzazione: partire SEMPRE dal presupposto 
che i dati e le richieste che arrivano dal client al server possano essere 
fraudolente, quindi predisporre meccanismi di autenticazione e 
autorizzazione diversi dal cookie di autenticazione (Anti-Forgery tokens, 
OAuth, ecc.) 
• Validazione: predisporre SEMPRE la validazione dei dati sia lato client 
che lato server 
• Mitigare il reverse engineering tramite minificazione e/o compilazione 
delle risorse Javascript (Dart, Coffescript) 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Patterns, Patterns, Patterns 
• Una SPA può facilmente diventare abbastanza complessa da 
richiedere una certa disciplina nello sviluppo Javascript in 
termini di: 
 Organizzazione della codebase 
 Architettura e design: MV* Presentation Pattern 
 Coding standard: JSLint non è sindacabile 
 Design and Idiom Patterns: 
 Namespace 
 Self executing functions 
 Module pattern 
 AMD: Asynchronous Module Definition (es. Require JS) 
 Anchor pattern (gestire la cronologia del browser, SEO) 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demo 
Scheletro strutturale di una solution SPA 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Unit Testing 
• Esistono diversi framework di Unit Testing Javascript, i più 
utilizzati sono: 
 QUnit 
 Jasmine 
 Mocha 
• Automatizzare il processo di esecuzione delle suite di Test è 
possibile tramite ambienti di automazione come Karma che 
permettono anche di: 
 Eseguire le suite di Test su differenti browser tramite PhantomJS 
 Integrare le suite di Test in ambienti di Continuous Integration 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demo 
Javascript Unit Testing con Jasmine 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Ciclo di Sviluppo e Delivery 
• Il ciclo di sviluppo e delivery di una SPA si può riassumere 
come: 
 Scrivere codice JavaScript e markup HTML/CSS 
 Verificare con JSLint il codice JavaScript 
 Scrivere Unit Test 
 Eseguire e verificare Unit Test 
 Possibilmente rilevare e verificare la coverage degli Unit Test 
 Combinare e minificare il codice JavaScript 
 Eseguire e verificare Unit Test sul codice combinato e minificato 
 Deployare usando il codice JavaScript combinato e minificato 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Parola d’ordine: Automatizzare 
• Il ciclo di sviluppo e delivery può essere automatizzato utilizzando un 
tool di task automation: Gulp.JS 
• Gulp.JS è un modulo di Node.JS e si installa con il package manager 
npm 
• Gulp.JS offre la possibilità di automatizzare una grande quantità e 
varietà di task differenti tramite l’installazione di plug-in dedicati 
• Lo Unit Test runner Karma è disponibile come plug-in di Gulp.JS 
• Gulp.JS si basa sul principio di funzionamento per cui: 
 si eseguono uno o più task sequenzialmente 
 Un task è definito da una sequenza di trasformazioni applicate ad uno stream 
di file 
 Uno stream di file è definito da una lista di file sorgente 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demo 
Build System con Gulp.JS e Karma 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
E perchè no: Page Automation 
• Phantom.JS oltre a svolgere la funzione di Headless 
Website Testing a supporto di Karma, può essere 
usato per eseguire Page Automation 
• Page Automation è un ottimo modo di condurre 
User Interface Testing 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Codice sorgente Demo 
• https://github.com/robymes/WebApplicationTesting 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
demo 
Page Automation con PhantomJS 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014
Q&A 
Tutto il materiale di questa sessione su 
http://www.communitydays.it/ 
Lascia il feedback su questa sessione dal sito, 
potrai essere estratto per i nostri premi! 
Seguici su 
Twitter @CommunityDaysIT 
Facebook http://facebook.com/cdaysit 
#CDays14 
#CDays14 – Roma - 23, 24 e 25 Settembre 2014

More Related Content

What's hot

Web in real time con signalR
Web in real time con signalRWeb in real time con signalR
Web in real time con signalR
Nicolò Carandini
 
Test di carico con Visual Studio Online: facile!
Test di carico con Visual Studio Online: facile! Test di carico con Visual Studio Online: facile!
Test di carico con Visual Studio Online: facile!
Davide Benvegnù
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
Pietro Libro
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
Andrea Dottor
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
Mauro Servienti
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailDotNetMarche
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
Andrea Dottor
 
Workflow Dev-Test-Live per WordPress
Workflow Dev-Test-Live per WordPressWorkflow Dev-Test-Live per WordPress
Workflow Dev-Test-Live per WordPress
Farnedi ICT srl
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
Antonio Liccardi
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automationDotNetCampus
 
Oltre il Worker Role, da Serverless computing a VM Scale Set
Oltre il Worker Role, da Serverless computing a VM Scale SetOltre il Worker Role, da Serverless computing a VM Scale Set
Oltre il Worker Role, da Serverless computing a VM Scale Set
Vito Flavio Lorusso
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
Andrea Dottor
 
Maven: Convention over Configuration
Maven: Convention over ConfigurationMaven: Convention over Configuration
Maven: Convention over Configuration
vschiavoni
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Codemotion
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101DotNetCampus
 
DevOps by examples - Agile O'Day 2017
DevOps by examples - Agile O'Day 2017DevOps by examples - Agile O'Day 2017
DevOps by examples - Agile O'Day 2017
Giulio Vian
 
Mvvm
MvvmMvvm
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
Eugenio Minardi
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 

What's hot (20)

Web in real time con signalR
Web in real time con signalRWeb in real time con signalR
Web in real time con signalR
 
Test di carico con Visual Studio Online: facile!
Test di carico con Visual Studio Online: facile! Test di carico con Visual Studio Online: facile!
Test di carico con Visual Studio Online: facile!
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
 
ASP.NET Core - Razor Pages
ASP.NET Core - Razor PagesASP.NET Core - Razor Pages
ASP.NET Core - Razor Pages
 
Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010Dal requisito all'implementazione @ CD2010
Dal requisito all'implementazione @ CD2010
 
Sviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle MonorailSviluppo Web Agile con Castle Monorail
Sviluppo Web Agile con Castle Monorail
 
Dal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developersDal RenderFragment ai Generics, tips for Blazor developers
Dal RenderFragment ai Generics, tips for Blazor developers
 
Workflow Dev-Test-Live per WordPress
Workflow Dev-Test-Live per WordPressWorkflow Dev-Test-Live per WordPress
Workflow Dev-Test-Live per WordPress
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 
Javascript task automation
Javascript task automationJavascript task automation
Javascript task automation
 
Oltre il Worker Role, da Serverless computing a VM Scale Set
Oltre il Worker Role, da Serverless computing a VM Scale SetOltre il Worker Role, da Serverless computing a VM Scale Set
Oltre il Worker Role, da Serverless computing a VM Scale Set
 
Creare API pubbliche, come evitare gli errori comuni
 Creare API pubbliche, come evitare gli errori comuni Creare API pubbliche, come evitare gli errori comuni
Creare API pubbliche, come evitare gli errori comuni
 
Maven: Convention over Configuration
Maven: Convention over ConfigurationMaven: Convention over Configuration
Maven: Convention over Configuration
 
Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015Slide typescript - xe dotnet - Codemotion Rome 2015
Slide typescript - xe dotnet - Codemotion Rome 2015
 
Fe04 angular js-101
Fe04   angular js-101Fe04   angular js-101
Fe04 angular js-101
 
DevOps by examples - Agile O'Day 2017
DevOps by examples - Agile O'Day 2017DevOps by examples - Agile O'Day 2017
DevOps by examples - Agile O'Day 2017
 
Mvvm
MvvmMvvm
Mvvm
 
Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS Il Web orientato al futuro: Express, Angular e nodeJS
Il Web orientato al futuro: Express, Angular e nodeJS
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 
Madaudo
MadaudoMadaudo
Madaudo
 

Similar to Single Page Applications

Code quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptCode quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScript
Roberto Messora
 
Single Page web Application
Single Page web ApplicationSingle Page web Application
Single Page web Application
Roberto Messora
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
Riccardo Zamana
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applicationsDotNetCampus
 
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio Benedetti
Giuneco S.r.l
 
SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)
Sabino Labarile
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
Emerasoft, solutions to collaborate
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
Andrea Dottor
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)
Giuseppe Vizzari
 
Tesi8
Tesi8Tesi8
Tesi8
tryyrt
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
DotNetCampus
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campusDotNetCampus
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
Daniele Mondello
 
Infrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOpsInfrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOps
Pietro Ciotola
 
Javascript Unit Testing
Javascript Unit TestingJavascript Unit Testing
Javascript Unit Testing
Roberto Messora
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
Andrea Dottor
 
Tech Webinar: Come ottimizzare il workflow nello sviluppo di Web App
Tech Webinar: Come ottimizzare il workflow nello sviluppo di Web AppTech Webinar: Come ottimizzare il workflow nello sviluppo di Web App
Tech Webinar: Come ottimizzare il workflow nello sviluppo di Web App
Codemotion
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAXTommaso Torti
 
Virtual Agency
Virtual AgencyVirtual Agency
Virtual Agency
Enrico Micco
 

Similar to Single Page Applications (20)

Code quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScriptCode quality e test automatizzati con JavaScript
Code quality e test automatizzati con JavaScript
 
Single Page web Application
Single Page web ApplicationSingle Page web Application
Single Page web Application
 
Azure dayroma java, il lato oscuro del cloud
Azure dayroma   java, il lato oscuro del cloudAzure dayroma   java, il lato oscuro del cloud
Azure dayroma java, il lato oscuro del cloud
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Selenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio BenedettiSelenium e testing web - di Alessio Benedetti
Selenium e testing web - di Alessio Benedetti
 
SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)
 
OpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studioOpenDevSecOps 2019 - Open devsecops un caso di studio
OpenDevSecOps 2019 - Open devsecops un caso di studio
 
Sviluppare Azure Web Apps
Sviluppare Azure Web AppsSviluppare Azure Web Apps
Sviluppare Azure Web Apps
 
Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)Introduzione a JavaScript e jQuery (1/2)
Introduzione a JavaScript e jQuery (1/2)
 
Tesi8
Tesi8Tesi8
Tesi8
 
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLDTYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
TYPESCRIPT, ANGULAR E BOOTSTRAP ASSIEME PER APPLICAZIONI REAL WORLD
 
Slide typescript - net campus
Slide typescript - net campusSlide typescript - net campus
Slide typescript - net campus
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Infrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOpsInfrastructure as Code e metodologia DevOps
Infrastructure as Code e metodologia DevOps
 
Javascript Unit Testing
Javascript Unit TestingJavascript Unit Testing
Javascript Unit Testing
 
Blazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi realiBlazor ha vinto? Storie di casi reali
Blazor ha vinto? Storie di casi reali
 
Tech Webinar: Come ottimizzare il workflow nello sviluppo di Web App
Tech Webinar: Come ottimizzare il workflow nello sviluppo di Web AppTech Webinar: Come ottimizzare il workflow nello sviluppo di Web App
Tech Webinar: Come ottimizzare il workflow nello sviluppo di Web App
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAX
 
Web frameworks
Web frameworksWeb frameworks
Web frameworks
 
Virtual Agency
Virtual AgencyVirtual Agency
Virtual Agency
 

More from Roberto Messora

Azure Synapse: data lake & modern data warehouse dalla A alla Z
Azure Synapse: data lake &  modern data warehouse dalla A alla ZAzure Synapse: data lake &  modern data warehouse dalla A alla Z
Azure Synapse: data lake & modern data warehouse dalla A alla Z
Roberto Messora
 
Azure Data Factory: l'evoluzione della specie della data integration
Azure Data Factory: l'evoluzione della specie della data integrationAzure Data Factory: l'evoluzione della specie della data integration
Azure Data Factory: l'evoluzione della specie della data integration
Roberto Messora
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
Roberto Messora
 
Seminario Big Data
Seminario Big DataSeminario Big Data
Seminario Big Data
Roberto Messora
 
Real world Visual Studio Code
Real world Visual Studio CodeReal world Visual Studio Code
Real world Visual Studio Code
Roberto Messora
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker Container
Roberto Messora
 
Docker as a hosting target
Docker as a hosting targetDocker as a hosting target
Docker as a hosting target
Roberto Messora
 
Da imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JSDa imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JS
Roberto Messora
 
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extensionEvent streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Roberto Messora
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
Roberto Messora
 
Self-adaptive geospatial web applications
Self-adaptive geospatial web applicationsSelf-adaptive geospatial web applications
Self-adaptive geospatial web applicationsRoberto Messora
 
Web technologies and patterns in HTML5 mapping
Web technologies and patterns in HTML5 mappingWeb technologies and patterns in HTML5 mapping
Web technologies and patterns in HTML5 mappingRoberto Messora
 
Usare Knockout JS
Usare Knockout JSUsare Knockout JS
Usare Knockout JS
Roberto Messora
 
MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!
Roberto Messora
 

More from Roberto Messora (14)

Azure Synapse: data lake & modern data warehouse dalla A alla Z
Azure Synapse: data lake &  modern data warehouse dalla A alla ZAzure Synapse: data lake &  modern data warehouse dalla A alla Z
Azure Synapse: data lake & modern data warehouse dalla A alla Z
 
Azure Data Factory: l'evoluzione della specie della data integration
Azure Data Factory: l'evoluzione della specie della data integrationAzure Data Factory: l'evoluzione della specie della data integration
Azure Data Factory: l'evoluzione della specie della data integration
 
Introduzione a Docker
Introduzione a DockerIntroduzione a Docker
Introduzione a Docker
 
Seminario Big Data
Seminario Big DataSeminario Big Data
Seminario Big Data
 
Real world Visual Studio Code
Real world Visual Studio CodeReal world Visual Studio Code
Real world Visual Studio Code
 
Architetture a Microservizi con Docker Container
Architetture a Microservizi con Docker ContainerArchitetture a Microservizi con Docker Container
Architetture a Microservizi con Docker Container
 
Docker as a hosting target
Docker as a hosting targetDocker as a hosting target
Docker as a hosting target
 
Da imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JSDa imperativo a reattivo: Bacon.JS
Da imperativo a reattivo: Bacon.JS
 
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extensionEvent streaming pipeline with Windows Azure and ArcGIS Geoevent extension
Event streaming pipeline with Windows Azure and ArcGIS Geoevent extension
 
Javascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il webJavascript avanzato: sfruttare al massimo il web
Javascript avanzato: sfruttare al massimo il web
 
Self-adaptive geospatial web applications
Self-adaptive geospatial web applicationsSelf-adaptive geospatial web applications
Self-adaptive geospatial web applications
 
Web technologies and patterns in HTML5 mapping
Web technologies and patterns in HTML5 mappingWeb technologies and patterns in HTML5 mapping
Web technologies and patterns in HTML5 mapping
 
Usare Knockout JS
Usare Knockout JSUsare Knockout JS
Usare Knockout JS
 
MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!MV* presentation frameworks in Javascript: en garde, pret, allez!
MV* presentation frameworks in Javascript: en garde, pret, allez!
 

Single Page Applications

  • 1. WEB02 – Single Page Applications #CDays14 – Roma - 23, 24 e 25 Settembre 2014 Roberto Messora roberto@messora.com - @robymes
  • 2. Grazie a #CDays14 – Roma - 23, 24 e 25 Settembre 2014 Sponsor
  • 3. Agenda • Riassunto delle puntate precedenti • Riprendiamo un “paio” di concetti  Cosa, Perchè, Come  Security  Design Patterns  Unit Testing • Organizzare una solution • Build System  L’ecosistema di Node.JS (ma non il web server)  Task automation con Gulp.JS  Unit Testing automation con Karma  UI Testing automation con Phantom.JS #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 4. Nelle puntate precedenti • 2012 - Javascript avanzato: sfruttare al massimo il web  http://bit.ly/1rooMbA • 2013 - Usare Knockout.js  http://bit.ly/1rooJwv • 2014 – Single Page Applications: Come? Cosa? Perchè?  http://bit.ly/1rooGRr #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 5. Cosa • SPA è l’acronimo di Single Page (Web) Application • Si riferisce in genere ad un’applicazione web in cui l’intera esperienza utente è erogata tramite una unica pagina, spesso ricca di contenuti e della user experience • Una SPA si caratterizza per l’utilizzo di tecnologie di ultima generazione:  HTML5  CSS3  Javascript #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 6. Perché • Si sceglie di sviluppare una SPA per diversi motivi:  Esperienza utente molto ricca (desktop-like tramite CSS3 e JavaScript)  Applicazioni più responsive e veloci grazie al massiccio utilizzo di chiamate AJAX  Migliore adattamento all’ambiente mobile anche per quanto riguarda il ridotto scambio di dati con il server o la possibilità di eseguire web app offline  Perchè così fan tutti… #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 7. Come • Non esiste un modo univoco per sviluppare una SPA:  Decine di framework Javascript su cui è possibile basare una SPA (fare un giro su http://todomvc.com/ per rendersene conto)  Molteplici opzioni di tecnologia lato server:  Stack Microsoft ASP.NET (classico + WCF, MVC)  Node.JS, quasi sempre implementati come endpoint di servizi REST/JSON  Basi dati non relazionali che forniscono nativamente un accesso REST #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 8. Sicurezza • JavaScript e sicurezza sono due concetti abbastanza distanti fra di loro • Usare sempre HTTPS • Autenticazione & Autorizzazione: partire SEMPRE dal presupposto che i dati e le richieste che arrivano dal client al server possano essere fraudolente, quindi predisporre meccanismi di autenticazione e autorizzazione diversi dal cookie di autenticazione (Anti-Forgery tokens, OAuth, ecc.) • Validazione: predisporre SEMPRE la validazione dei dati sia lato client che lato server • Mitigare il reverse engineering tramite minificazione e/o compilazione delle risorse Javascript (Dart, Coffescript) #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 9. Patterns, Patterns, Patterns • Una SPA può facilmente diventare abbastanza complessa da richiedere una certa disciplina nello sviluppo Javascript in termini di:  Organizzazione della codebase  Architettura e design: MV* Presentation Pattern  Coding standard: JSLint non è sindacabile  Design and Idiom Patterns:  Namespace  Self executing functions  Module pattern  AMD: Asynchronous Module Definition (es. Require JS)  Anchor pattern (gestire la cronologia del browser, SEO) #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 10. demo Scheletro strutturale di una solution SPA #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 11. Unit Testing • Esistono diversi framework di Unit Testing Javascript, i più utilizzati sono:  QUnit  Jasmine  Mocha • Automatizzare il processo di esecuzione delle suite di Test è possibile tramite ambienti di automazione come Karma che permettono anche di:  Eseguire le suite di Test su differenti browser tramite PhantomJS  Integrare le suite di Test in ambienti di Continuous Integration #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 12. demo Javascript Unit Testing con Jasmine #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 13. Ciclo di Sviluppo e Delivery • Il ciclo di sviluppo e delivery di una SPA si può riassumere come:  Scrivere codice JavaScript e markup HTML/CSS  Verificare con JSLint il codice JavaScript  Scrivere Unit Test  Eseguire e verificare Unit Test  Possibilmente rilevare e verificare la coverage degli Unit Test  Combinare e minificare il codice JavaScript  Eseguire e verificare Unit Test sul codice combinato e minificato  Deployare usando il codice JavaScript combinato e minificato #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 14. Parola d’ordine: Automatizzare • Il ciclo di sviluppo e delivery può essere automatizzato utilizzando un tool di task automation: Gulp.JS • Gulp.JS è un modulo di Node.JS e si installa con il package manager npm • Gulp.JS offre la possibilità di automatizzare una grande quantità e varietà di task differenti tramite l’installazione di plug-in dedicati • Lo Unit Test runner Karma è disponibile come plug-in di Gulp.JS • Gulp.JS si basa sul principio di funzionamento per cui:  si eseguono uno o più task sequenzialmente  Un task è definito da una sequenza di trasformazioni applicate ad uno stream di file  Uno stream di file è definito da una lista di file sorgente #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 15. demo Build System con Gulp.JS e Karma #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 16. E perchè no: Page Automation • Phantom.JS oltre a svolgere la funzione di Headless Website Testing a supporto di Karma, può essere usato per eseguire Page Automation • Page Automation è un ottimo modo di condurre User Interface Testing #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 17. Codice sorgente Demo • https://github.com/robymes/WebApplicationTesting #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 18. demo Page Automation con PhantomJS #CDays14 – Roma - 23, 24 e 25 Settembre 2014
  • 19. Q&A Tutto il materiale di questa sessione su http://www.communitydays.it/ Lascia il feedback su questa sessione dal sito, potrai essere estratto per i nostri premi! Seguici su Twitter @CommunityDaysIT Facebook http://facebook.com/cdaysit #CDays14 #CDays14 – Roma - 23, 24 e 25 Settembre 2014

Editor's Notes

  1. Slide da mostrare prima di iniziare la sessione – non rimuovere!
  2. Ultima slide, obbligatoria