SlideShare a Scribd company logo
1 of 54
livinglabs.regione.puglia.it
e-SUAP
Piattaforma integrata di gestione telematica del SUAP
Partner Referenti
Ing. Sabino Labarile
Prof. Ing. Vitantonio Bevilacqua
Ing. Michele Martinelli
Il Progetto
Cittadini
imprese
professionisti
Ufficio SUAP
Enti PA (ASL, Vigili del Fuoco, etc..)
Cloud
e-SUAP
Tecnologie Client
Overview
• Single Page Application
• HTML5 + CSS3
• Durandal
• KnockoutJS
• Typescript
• Utils
• Bootstrap + Less
• QUnit
Single page application
Web application che gira all’interno
di una singola pagina HTML
allo scopo di fornire una UX più fluida,
comparabile a quella
di una applicazione desktop
SPA - Caratteristiche
• Chunking
• Controllers
• Templating
• Routing
• Real-time communication
• Local storage
• Testing
SPA - Chunking
Ad ogni richiesta il web
server combina HTML e dati
e li invia al client
La pagina web è costruita
caricando piccoli frammenti
di HTML e dati
NoSPA SPA
SPA - Controllers
Scripting JavaScript:
•gestione del DOM
•manipolazione dei dati
•logica applicativa
•chiamate AJAX
Separazione degli interessi
grazie a pattern MVC o
MVVM:
•model → logica di dominio
•view → logica di
visualizzazione
•controller → logica di
controllo
NoSPA SPA
SPA - Templating
Manipolazione della UI e del
DOM tramite scripting
JavaScript
Binding dichiarativo tra dati e
templates HTML
NoSPA SPA
SPA - Routing
Le pagine sono ricaricate ad
ogni richiesta
La navigazione si ottiene
selezionando le view.
Questo preserva
•stato della pagina
•elementi
•dati
NoSPA SPA
SPA - Real-time communication
Ogni richiesta è
monodirezionale dal browser
al web server
Tra un'applicazione client e il
web server è possibile la
comunicazione bidirezionale
NoSPA SPA
SPA - Local storage
Carichi intensivi di dati dal
server web
Cookie
Capacità di memorizzare
dati su un browser
•maggiori prestazioni
•accesso offline
NoSPA SPA
SPA - Testing
Test trial and error
verificando l’effetto nel
browser
Le applicazioni hanno a
disposizione dei framework
di test che permettono TDD
e BDD
NoSPA SPA
SPA - Pros & Cons
• User Experience
• Alleggerimento del server
• JavaScript
• Caricamento del client
• SEO
• JavaScript
HTML5
HTML è un markup language usato per
strutturare e presentare contenuti per il WWW
Con HTML5 si introducono elementi e attributi
che riflettono il tipico utilizzo dei siti web
moderni
HTML5 - What is new?
• Nuovi elementi
• Nuovi attributi
• Supporto a CSS3
• Video e Audio
• Grafica 2D/3D
• Local Storage
• Local SQL Database
• Web Applications
HTML5 - What is new?
Multimedia:
•Sostituito il tag generico <object> con i tag specifici
<video> e <audio>
Grafica:
•Nuovo elemento <canvas>
•Possibilità di usare SVG inline
•Supporto a CSS3 2D/3D
HTML5 - What is new?
Applicazioni:
•Local data storage
•Local file access
•Local SQL database
•Application cache
•Javascript workers
•XHTMLHttpRequest 2
•Geolocalization
HTML5 - What is new?
Elementi semantici:
Nuovi elementi <header>, <footer>, <menu>,
<section> e <article>
Forms:
Nuovi elementi, nuovi attributi, nuovi tipi di input
e validazione automatica.
CSS3
CSS è uno stylesheet language usato per
descrivere l'aspetto e la formattazione di un
documento scritto in un linguaggio di markup.
CSS3 è suddiviso in moduli, ognuno dei quali
aggiunge o estende caratteristiche di CSS2,
mantenendo retrocompatibilità
CSS3 - What is new?
• Nuovi selettori
• Nuove proprietà
• Animazioni
• Trasformazioni 2D/3D
• Angoli arrotondati
• Ombreggiature
• Font scaricabili
Durandal
Durandal è un framework JavaScript open
source progettato per la realizzazione di Single
Page Application
Comprende un set di tecnologie e convenzioni
per garantire la massima produttività
Durandal - Caratteristiche
• Architettura MV*
• Modularità JavaScript e HTML
• Application Lifecycle
• Navigazione
• Programmazione asincrona con i promise
• Ottimizzazione
• Costruito su jQuery, Knockout e RequireJS
KnockoutJS
KnockoutJS è una libreria JavaScript open
source che aiuta a creare interfacce utente
complesse con un semplice modello dei dati
sottostante
In pratica implementa il pattern MVVM e
fornisce uno strumento di templating
KnockoutJS - Esempio
function ViewModel() {
this.firstName = ko.observable();
}
ko.applyBindings(new ViewModel());
<html>
<head>
<script type=”text/javascript”
src=”knockout-3.1.0.js”></script>
<script type=”text/javascript”
src=”myscript.js”></script>
</head>
<body>
<input data-bind=“value: firstName”>
My name is
<span data-bind=“text: firstName”></span>
</body>
</html>
myscript.js mypage.html
KnockoutJS - Esempio
function ViewModel() {
this.firstName = ko.observable();
this.lastName = ko.observable();
this.fullName=ko.computed(function() {
return this.firstName()+’ ‘+this.lastName();
});
}
ko.applyBindings(new ViewModel());
<html>
<head>
<script type=”text/javascript”
src=”knockout-3.1.0.js”></script>
<script type=”text/javascript”
src=”myscript.js”></script>
</head>
<body>
<input data-bind=“value: firstName”>
<input data-bind=“value: lastName”>
My name is
<span data-bind=“text: fullName”></span>
</body>
</html>
myscript.js mypage.html
KnockoutJS - Esempio
function ViewModel() {
this.list = ko.observableArray([
{item: ’item1’},
{item: ’item2’},
{item: ’item3’},
]);
}
ko.applyBindings(new ViewModel());
<html>
<head>
<script type=”text/javascript”
src=“knockout-3.1.0.js”></script>
<script type=”text/javascript”
src=”myscript.js”></script>
</head>
<body>
Todo list:
<ul>
<!-- ko: foreach list -->
<li data-bind=“text: item”></li>
<!-- /ko -->
</ul>
</body>
</html>
myscript.js mypage.html
TypeScript
TypeScript è un linguaggio di
programmazione superset di Javascript
Aggiunge tipizzazione statica e
programmazione orientata agli oggetti
basata su classi
TypeScript - Esempio
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return ‘Hello, ‘ + this.greeting;
}
}
var greeter = new Greeter(‘world’);
var button = document.createElement(‘button’);
button.onclick = function() {
alert(greeter.greet());
}
document.body.appendChild(button);
var Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return ‘Hello, ‘ + this.greeting;
};
return Greeter;
})();
var greeter = new Greeter(‘world’);
var button = document.createElement(‘button’);
button.onclick = function () {
alert(greeter.greet());
};
document.body.appendChild(button);
myscript.ts myscript.js
JS Utils - Underscore
Underscore è una libreria JavaScript open source
che fornisce una marea di helper di programmazione
funzionale senza estendere gli oggetti build-in
Può delegare a funzioni built-in, in modo che i
browser moderni possano utilizzare le
implementazioni native di tali funzionalità
JS Utils - Underscore - Esempio
_.map([1, 2, 3], function(num){
return num * 3;
});
=> [3, 6, 9]
_.reduce([1, 2, 3], function(memo, num){
return memo + num;
}, 0);
=> 6
_.filter([1, 2, 3, 4, 5, 6], function(num){
return num % 2 == 0;
});
=> [2, 4, 6]
…
JS Utils - Async
Async è una libreria JavaScript open source
che fornisce potenti funzionalità per lavorare
con l’asincronia in JavaScript
JS Utils - Async - Esempio
async.series([
function(callback){
// do some stuff ...
callback(null, ’one’);
},
function(callback){
// do some more stuff …
callback(null, ’two’);
}
],
// optional callback
function(err, results){
// results is now equal to ['one', 'two']
});
async.parallel([
function(callback){
setTimeout(function(){
callback(null, ’one’);
}, 200);
},
function(callback){
setTimeout(function(){
callback(null, ’two’);
}, 100);
}
],
// optional callback
function(err, results){
// the results array will equal ['one','two’] even
// though second function had a shorter timeout.
});
Bootstrap
Bootstrap è un insieme di strumenti open
source per la creazione di siti e applicazioni
web
Comprende template HTML+CSS ed
estensioni JavaScript opzionali
Bootstrap - Componenti
Less
Less (Leaner CSS) è uno stylesheet language
dinamico che adorna CSS con variabili,
annidamento, mixin, operazioni e funzioni
LESS è un metalinguaggio annidato, difatti un
CSS valido è anche un LESS valido e con la
stessa semantica
Less
@base: #f938ab;
.box-shadow(@style, @c)
when (iscolor(@c)) {
-webkit-box-shadow: @style @c;
box-shadow: @style @c;
}
.box-shadow(@style, @alpha: 50%)
when (isnumber(@alpha)) {
.box-shadow(@style, rgba(0, 0, 0, @alpha));
}
.box {
color: saturate(@base, 5%);
border-color: lighten(@base, 30%);
div { .box-shadow(0 0 5px, 30%) }
}
.box {
color: #fe33ac;
border-color: #fdcdea;
}
.box div {
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
}
mystyle.less mystyle.css
QUnit
QUnit è un framework di test per JavaScript
QUnit
QUnit.test('a basic test example', function (assert) {
var obj = {};
assert.ok(true, 'Boolean true'); // passes
assert.ok(1, 'Number one'); // passes
assert.ok(false, 'Boolean false'); // fails
obj.start = 'Hello';
obj.end = 'Ciao';
// passes
assert.equal(obj.start, 'Hello', 'Opening greet');
// fails
assert.equal(obj.end, 'Goodbye', 'Closing greet');
});
Alternative
Conclusioni
Sviluppare una SPA è più complesso
rispetto allo sviluppo di una classica
applicazione Web
Conclusioni
La complessità si sposta sul client
Conclusioni
Le tecnologie si stanno raffinando
Riferimenti
• w3.org/TR/html5
• w3.org/TR/css3-*
• durandaljs.com
• knockoutjs.com
• typescriptlang.org
• underscorejs.org
• github.com/caolan/async
• getbootstrap.com
• lesscss.org
• qunitjs.com
Ing. Sabino Labarile
Code Architects s.r.l.
slabarile@codearchitects.com

More Related Content

What's hot

Session 02 - schema design e architettura
Session 02 - schema design e architetturaSession 02 - schema design e architettura
Session 02 - schema design e architetturaMongoDB
 
Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Martino Bordin
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerMatteo Magni
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRSManuel Scapolan
 
Webinar Italiano: Back-to-Basics: Sessione 8 - Monitoraggio e Performance Tuning
Webinar Italiano: Back-to-Basics: Sessione 8 - Monitoraggio e Performance TuningWebinar Italiano: Back-to-Basics: Sessione 8 - Monitoraggio e Performance Tuning
Webinar Italiano: Back-to-Basics: Sessione 8 - Monitoraggio e Performance TuningMongoDB
 
XML &amp; XSLT
XML &amp; XSLTXML &amp; XSLT
XML &amp; XSLTapest
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009Massimiliano Dessì
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009Massimiliano Dessì
 
Self hosted Services with .NET OWin
Self hosted Services with .NET OWinSelf hosted Services with .NET OWin
Self hosted Services with .NET OWinNicolò Carandini
 

What's hot (11)

Session 02 - schema design e architettura
Session 02 - schema design e architetturaSession 02 - schema design e architettura
Session 02 - schema design e architettura
 
Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3Entity Framework 4 vs NHibernate 3
Entity Framework 4 vs NHibernate 3
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
Domain Driven Design e CQRS
Domain Driven Design e CQRSDomain Driven Design e CQRS
Domain Driven Design e CQRS
 
Webinar Italiano: Back-to-Basics: Sessione 8 - Monitoraggio e Performance Tuning
Webinar Italiano: Back-to-Basics: Sessione 8 - Monitoraggio e Performance TuningWebinar Italiano: Back-to-Basics: Sessione 8 - Monitoraggio e Performance Tuning
Webinar Italiano: Back-to-Basics: Sessione 8 - Monitoraggio e Performance Tuning
 
AngularJS-Intro
AngularJS-IntroAngularJS-Intro
AngularJS-Intro
 
XML &amp; XSLT
XML &amp; XSLTXML &amp; XSLT
XML &amp; XSLT
 
Angularjs
AngularjsAngularjs
Angularjs
 
MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009MongoDB SpringFramework Meeting september 2009
MongoDB SpringFramework Meeting september 2009
 
MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009MongoDB Scala Roma SpringFramework Meeting2009
MongoDB Scala Roma SpringFramework Meeting2009
 
Self hosted Services with .NET OWin
Self hosted Services with .NET OWinSelf hosted Services with .NET OWin
Self hosted Services with .NET OWin
 

Similar to E suap - tecnologie client

Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5Pietro Polsinelli
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS DevicesAndrea Picchi
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerMatteo Magni
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webLuca Milan
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Massimo Bonanni
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Fabrizio Bernabei
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
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
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC FrameworkDotNetMarche
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8Valerio Radice
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...azuredayit
 
SmartClient by Isomorphic - Rich internet applications
SmartClient by Isomorphic - Rich internet applicationsSmartClient by Isomorphic - Rich internet applications
SmartClient by Isomorphic - Rich internet applicationsClaudio Bosticco
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript Stefano Marchisio
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow FoundationDotNetMarche
 

Similar to E suap - tecnologie client (20)

Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5Matteo Bicocchi - Introducing HTML5
Matteo Bicocchi - Introducing HTML5
 
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
Corso WebApp iOS - Lezione 06:   Web Development for iOS DevicesCorso WebApp iOS - Lezione 06:   Web Development for iOS Devices
Corso WebApp iOS - Lezione 06: Web Development for iOS Devices
 
Javascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesignerJavascript - 4 | WebMaster & WebDesigner
Javascript - 4 | WebMaster & WebDesigner
 
AngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni webAngularJS – Reinventare le applicazioni web
AngularJS – Reinventare le applicazioni web
 
Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!Asp.net web form 4.5 - what's new!!
Asp.net web form 4.5 - what's new!!
 
Html5 e PHP
Html5 e PHPHtml5 e PHP
Html5 e PHP
 
Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010Asp.net 4 Community Tour VS2010
Asp.net 4 Community Tour VS2010
 
Corso angular js componenti
Corso angular js componentiCorso angular js componenti
Corso angular js componenti
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
 
Yagwto
YagwtoYagwto
Yagwto
 
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
 
Asp.NET MVC Framework
Asp.NET MVC FrameworkAsp.NET MVC Framework
Asp.NET MVC Framework
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Introduzione ad angular 7/8
Introduzione ad angular 7/8Introduzione ad angular 7/8
Introduzione ad angular 7/8
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
SmartClient by Isomorphic - Rich internet applications
SmartClient by Isomorphic - Rich internet applicationsSmartClient by Isomorphic - Rich internet applications
SmartClient by Isomorphic - Rich internet applications
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript How create a single page apps using html5 and javascript
How create a single page apps using html5 and javascript
 
Introduzione a Workflow Foundation
Introduzione a Workflow FoundationIntroduzione a Workflow Foundation
Introduzione a Workflow Foundation
 

More from Sabino Labarile

SUE AGILE - Presentazione della piattaforma
SUE AGILE - Presentazione della piattaforma SUE AGILE - Presentazione della piattaforma
SUE AGILE - Presentazione della piattaforma Sabino Labarile
 
Manuale utente SUE AGILE
Manuale utente SUE AGILEManuale utente SUE AGILE
Manuale utente SUE AGILESabino Labarile
 
SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)Sabino Labarile
 
SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)Sabino Labarile
 
SUE AGILE MVVM (English)
SUE AGILE MVVM (English)SUE AGILE MVVM (English)
SUE AGILE MVVM (English)Sabino Labarile
 
SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)Sabino Labarile
 
SUE AGILE Framework (English)
SUE AGILE Framework (English)SUE AGILE Framework (English)
SUE AGILE Framework (English)Sabino Labarile
 
SUE AGILE Architecture (English)
SUE AGILE Architecture (English)SUE AGILE Architecture (English)
SUE AGILE Architecture (English)Sabino Labarile
 
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMASUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMASabino Labarile
 
e-suap - client technologies- english version
e-suap - client technologies- english versione-suap - client technologies- english version
e-suap - client technologies- english versionSabino Labarile
 
e-suap cloud computing- English version
e-suap cloud computing- English versione-suap cloud computing- English version
e-suap cloud computing- English versionSabino Labarile
 
e-SUAP - Ochestration building block (italian)
e-SUAP - Ochestration building block (italian)e-SUAP - Ochestration building block (italian)
e-SUAP - Ochestration building block (italian)Sabino Labarile
 
e-SUAP - Ochestration building block (english)
e-SUAP - Ochestration building block (english)e-SUAP - Ochestration building block (english)
e-SUAP - Ochestration building block (english)Sabino Labarile
 
e-SUAP - Security - Windows azure access control list (english version)
e-SUAP - Security - Windows azure access control list (english version)e-SUAP - Security - Windows azure access control list (english version)
e-SUAP - Security - Windows azure access control list (english version)Sabino Labarile
 
e-SUAP - Security - Windows azure access control list (italian version)
e-SUAP - Security - Windows azure access control list (italian version)e-SUAP - Security - Windows azure access control list (italian version)
e-SUAP - Security - Windows azure access control list (italian version)Sabino Labarile
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)Sabino Labarile
 
e-SUAP - Data access server side (English)
e-SUAP - Data access server side (English)e-SUAP - Data access server side (English)
e-SUAP - Data access server side (English)Sabino Labarile
 
e-suap - general software architecture (English)
e-suap - general software architecture (English)e-suap - general software architecture (English)
e-suap - general software architecture (English)Sabino Labarile
 
e-SUAP - General software architecture (English)
e-SUAP - General software architecture  (English)e-SUAP - General software architecture  (English)
e-SUAP - General software architecture (English)Sabino Labarile
 
E suap - cloud computing (Italian)
E suap - cloud computing (Italian)E suap - cloud computing (Italian)
E suap - cloud computing (Italian)Sabino Labarile
 

More from Sabino Labarile (20)

SUE AGILE - Presentazione della piattaforma
SUE AGILE - Presentazione della piattaforma SUE AGILE - Presentazione della piattaforma
SUE AGILE - Presentazione della piattaforma
 
Manuale utente SUE AGILE
Manuale utente SUE AGILEManuale utente SUE AGILE
Manuale utente SUE AGILE
 
SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)SUE AGILE Framework (Italiano)
SUE AGILE Framework (Italiano)
 
SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)SUE AGILE Architettura (Italiano)
SUE AGILE Architettura (Italiano)
 
SUE AGILE MVVM (English)
SUE AGILE MVVM (English)SUE AGILE MVVM (English)
SUE AGILE MVVM (English)
 
SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)SUE AGILE MVVM (Italian)
SUE AGILE MVVM (Italian)
 
SUE AGILE Framework (English)
SUE AGILE Framework (English)SUE AGILE Framework (English)
SUE AGILE Framework (English)
 
SUE AGILE Architecture (English)
SUE AGILE Architecture (English)SUE AGILE Architecture (English)
SUE AGILE Architecture (English)
 
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMASUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
SUE AGILE - GUIDA ALL'UTILIZZO DELLA PIATTAFORMA
 
e-suap - client technologies- english version
e-suap - client technologies- english versione-suap - client technologies- english version
e-suap - client technologies- english version
 
e-suap cloud computing- English version
e-suap cloud computing- English versione-suap cloud computing- English version
e-suap cloud computing- English version
 
e-SUAP - Ochestration building block (italian)
e-SUAP - Ochestration building block (italian)e-SUAP - Ochestration building block (italian)
e-SUAP - Ochestration building block (italian)
 
e-SUAP - Ochestration building block (english)
e-SUAP - Ochestration building block (english)e-SUAP - Ochestration building block (english)
e-SUAP - Ochestration building block (english)
 
e-SUAP - Security - Windows azure access control list (english version)
e-SUAP - Security - Windows azure access control list (english version)e-SUAP - Security - Windows azure access control list (english version)
e-SUAP - Security - Windows azure access control list (english version)
 
e-SUAP - Security - Windows azure access control list (italian version)
e-SUAP - Security - Windows azure access control list (italian version)e-SUAP - Security - Windows azure access control list (italian version)
e-SUAP - Security - Windows azure access control list (italian version)
 
e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)e-SUAP - General software architecture (Italiano)
e-SUAP - General software architecture (Italiano)
 
e-SUAP - Data access server side (English)
e-SUAP - Data access server side (English)e-SUAP - Data access server side (English)
e-SUAP - Data access server side (English)
 
e-suap - general software architecture (English)
e-suap - general software architecture (English)e-suap - general software architecture (English)
e-suap - general software architecture (English)
 
e-SUAP - General software architecture (English)
e-SUAP - General software architecture  (English)e-SUAP - General software architecture  (English)
e-SUAP - General software architecture (English)
 
E suap - cloud computing (Italian)
E suap - cloud computing (Italian)E suap - cloud computing (Italian)
E suap - cloud computing (Italian)
 

E suap - tecnologie client

  • 2. Partner Referenti Ing. Sabino Labarile Prof. Ing. Vitantonio Bevilacqua Ing. Michele Martinelli
  • 3. Il Progetto Cittadini imprese professionisti Ufficio SUAP Enti PA (ASL, Vigili del Fuoco, etc..) Cloud
  • 5. Overview • Single Page Application • HTML5 + CSS3 • Durandal • KnockoutJS • Typescript • Utils • Bootstrap + Less • QUnit
  • 6. Single page application Web application che gira all’interno di una singola pagina HTML allo scopo di fornire una UX più fluida, comparabile a quella di una applicazione desktop
  • 7. SPA - Caratteristiche • Chunking • Controllers • Templating • Routing • Real-time communication • Local storage • Testing
  • 8. SPA - Chunking Ad ogni richiesta il web server combina HTML e dati e li invia al client La pagina web è costruita caricando piccoli frammenti di HTML e dati NoSPA SPA
  • 9. SPA - Controllers Scripting JavaScript: •gestione del DOM •manipolazione dei dati •logica applicativa •chiamate AJAX Separazione degli interessi grazie a pattern MVC o MVVM: •model → logica di dominio •view → logica di visualizzazione •controller → logica di controllo NoSPA SPA
  • 10. SPA - Templating Manipolazione della UI e del DOM tramite scripting JavaScript Binding dichiarativo tra dati e templates HTML NoSPA SPA
  • 11. SPA - Routing Le pagine sono ricaricate ad ogni richiesta La navigazione si ottiene selezionando le view. Questo preserva •stato della pagina •elementi •dati NoSPA SPA
  • 12. SPA - Real-time communication Ogni richiesta è monodirezionale dal browser al web server Tra un'applicazione client e il web server è possibile la comunicazione bidirezionale NoSPA SPA
  • 13. SPA - Local storage Carichi intensivi di dati dal server web Cookie Capacità di memorizzare dati su un browser •maggiori prestazioni •accesso offline NoSPA SPA
  • 14. SPA - Testing Test trial and error verificando l’effetto nel browser Le applicazioni hanno a disposizione dei framework di test che permettono TDD e BDD NoSPA SPA
  • 15. SPA - Pros & Cons • User Experience • Alleggerimento del server • JavaScript • Caricamento del client • SEO • JavaScript
  • 16.
  • 17. HTML5 HTML è un markup language usato per strutturare e presentare contenuti per il WWW Con HTML5 si introducono elementi e attributi che riflettono il tipico utilizzo dei siti web moderni
  • 18. HTML5 - What is new? • Nuovi elementi • Nuovi attributi • Supporto a CSS3 • Video e Audio • Grafica 2D/3D • Local Storage • Local SQL Database • Web Applications
  • 19. HTML5 - What is new? Multimedia: •Sostituito il tag generico <object> con i tag specifici <video> e <audio> Grafica: •Nuovo elemento <canvas> •Possibilità di usare SVG inline •Supporto a CSS3 2D/3D
  • 20. HTML5 - What is new? Applicazioni: •Local data storage •Local file access •Local SQL database •Application cache •Javascript workers •XHTMLHttpRequest 2 •Geolocalization
  • 21. HTML5 - What is new? Elementi semantici: Nuovi elementi <header>, <footer>, <menu>, <section> e <article> Forms: Nuovi elementi, nuovi attributi, nuovi tipi di input e validazione automatica.
  • 22.
  • 23. CSS3 CSS è uno stylesheet language usato per descrivere l'aspetto e la formattazione di un documento scritto in un linguaggio di markup. CSS3 è suddiviso in moduli, ognuno dei quali aggiunge o estende caratteristiche di CSS2, mantenendo retrocompatibilità
  • 24. CSS3 - What is new? • Nuovi selettori • Nuove proprietà • Animazioni • Trasformazioni 2D/3D • Angoli arrotondati • Ombreggiature • Font scaricabili
  • 25.
  • 26. Durandal Durandal è un framework JavaScript open source progettato per la realizzazione di Single Page Application Comprende un set di tecnologie e convenzioni per garantire la massima produttività
  • 27. Durandal - Caratteristiche • Architettura MV* • Modularità JavaScript e HTML • Application Lifecycle • Navigazione • Programmazione asincrona con i promise • Ottimizzazione • Costruito su jQuery, Knockout e RequireJS
  • 28.
  • 29. KnockoutJS KnockoutJS è una libreria JavaScript open source che aiuta a creare interfacce utente complesse con un semplice modello dei dati sottostante In pratica implementa il pattern MVVM e fornisce uno strumento di templating
  • 30. KnockoutJS - Esempio function ViewModel() { this.firstName = ko.observable(); } ko.applyBindings(new ViewModel()); <html> <head> <script type=”text/javascript” src=”knockout-3.1.0.js”></script> <script type=”text/javascript” src=”myscript.js”></script> </head> <body> <input data-bind=“value: firstName”> My name is <span data-bind=“text: firstName”></span> </body> </html> myscript.js mypage.html
  • 31. KnockoutJS - Esempio function ViewModel() { this.firstName = ko.observable(); this.lastName = ko.observable(); this.fullName=ko.computed(function() { return this.firstName()+’ ‘+this.lastName(); }); } ko.applyBindings(new ViewModel()); <html> <head> <script type=”text/javascript” src=”knockout-3.1.0.js”></script> <script type=”text/javascript” src=”myscript.js”></script> </head> <body> <input data-bind=“value: firstName”> <input data-bind=“value: lastName”> My name is <span data-bind=“text: fullName”></span> </body> </html> myscript.js mypage.html
  • 32. KnockoutJS - Esempio function ViewModel() { this.list = ko.observableArray([ {item: ’item1’}, {item: ’item2’}, {item: ’item3’}, ]); } ko.applyBindings(new ViewModel()); <html> <head> <script type=”text/javascript” src=“knockout-3.1.0.js”></script> <script type=”text/javascript” src=”myscript.js”></script> </head> <body> Todo list: <ul> <!-- ko: foreach list --> <li data-bind=“text: item”></li> <!-- /ko --> </ul> </body> </html> myscript.js mypage.html
  • 33.
  • 34. TypeScript TypeScript è un linguaggio di programmazione superset di Javascript Aggiunge tipizzazione statica e programmazione orientata agli oggetti basata su classi
  • 35. TypeScript - Esempio class Greeter { greeting: string; constructor(message: string) { this.greeting = message; } greet() { return ‘Hello, ‘ + this.greeting; } } var greeter = new Greeter(‘world’); var button = document.createElement(‘button’); button.onclick = function() { alert(greeter.greet()); } document.body.appendChild(button); var Greeter = (function () { function Greeter(message) { this.greeting = message; } Greeter.prototype.greet = function () { return ‘Hello, ‘ + this.greeting; }; return Greeter; })(); var greeter = new Greeter(‘world’); var button = document.createElement(‘button’); button.onclick = function () { alert(greeter.greet()); }; document.body.appendChild(button); myscript.ts myscript.js
  • 36.
  • 37. JS Utils - Underscore Underscore è una libreria JavaScript open source che fornisce una marea di helper di programmazione funzionale senza estendere gli oggetti build-in Può delegare a funzioni built-in, in modo che i browser moderni possano utilizzare le implementazioni native di tali funzionalità
  • 38. JS Utils - Underscore - Esempio _.map([1, 2, 3], function(num){ return num * 3; }); => [3, 6, 9] _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); => 6 _.filter([1, 2, 3, 4, 5, 6], function(num){ return num % 2 == 0; }); => [2, 4, 6] …
  • 39. JS Utils - Async Async è una libreria JavaScript open source che fornisce potenti funzionalità per lavorare con l’asincronia in JavaScript
  • 40. JS Utils - Async - Esempio async.series([ function(callback){ // do some stuff ... callback(null, ’one’); }, function(callback){ // do some more stuff … callback(null, ’two’); } ], // optional callback function(err, results){ // results is now equal to ['one', 'two'] }); async.parallel([ function(callback){ setTimeout(function(){ callback(null, ’one’); }, 200); }, function(callback){ setTimeout(function(){ callback(null, ’two’); }, 100); } ], // optional callback function(err, results){ // the results array will equal ['one','two’] even // though second function had a shorter timeout. });
  • 41.
  • 42. Bootstrap Bootstrap è un insieme di strumenti open source per la creazione di siti e applicazioni web Comprende template HTML+CSS ed estensioni JavaScript opzionali
  • 44. Less Less (Leaner CSS) è uno stylesheet language dinamico che adorna CSS con variabili, annidamento, mixin, operazioni e funzioni LESS è un metalinguaggio annidato, difatti un CSS valido è anche un LESS valido e con la stessa semantica
  • 45. Less @base: #f938ab; .box-shadow(@style, @c) when (iscolor(@c)) { -webkit-box-shadow: @style @c; box-shadow: @style @c; } .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) { .box-shadow(@style, rgba(0, 0, 0, @alpha)); } .box { color: saturate(@base, 5%); border-color: lighten(@base, 30%); div { .box-shadow(0 0 5px, 30%) } } .box { color: #fe33ac; border-color: #fdcdea; } .box div { -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); } mystyle.less mystyle.css
  • 46.
  • 47. QUnit QUnit è un framework di test per JavaScript
  • 48. QUnit QUnit.test('a basic test example', function (assert) { var obj = {}; assert.ok(true, 'Boolean true'); // passes assert.ok(1, 'Number one'); // passes assert.ok(false, 'Boolean false'); // fails obj.start = 'Hello'; obj.end = 'Ciao'; // passes assert.equal(obj.start, 'Hello', 'Opening greet'); // fails assert.equal(obj.end, 'Goodbye', 'Closing greet'); });
  • 50. Conclusioni Sviluppare una SPA è più complesso rispetto allo sviluppo di una classica applicazione Web
  • 51. Conclusioni La complessità si sposta sul client
  • 52. Conclusioni Le tecnologie si stanno raffinando
  • 53. Riferimenti • w3.org/TR/html5 • w3.org/TR/css3-* • durandaljs.com • knockoutjs.com • typescriptlang.org • underscorejs.org • github.com/caolan/async • getbootstrap.com • lesscss.org • qunitjs.com
  • 54. Ing. Sabino Labarile Code Architects s.r.l. slabarile@codearchitects.com