e-suap - teconlogie client

56
livinglabs.regione.puglia.it eSUAP Pia6aforma integrata di ges:one telema:ca del SUAP

Upload: apuliasoft

Post on 18-Dec-2014

52 views

Category:

Technology


1 download

DESCRIPTION

Presentation about the client technologies behind the e-SUAP project. You can find information about Single Page Application, Durandal, Knockout, Typescript, Underscore, Async, Bootstrap, Less and QUnit.

TRANSCRIPT

Page 1: e-SUAP - Teconlogie client

livinglabs.regione.puglia.it  

e-­‐SUAP  

Pia6aforma  integrata  di  ges:one  telema:ca  del  SUAP  

Page 2: e-SUAP - Teconlogie client

Partner

Page 3: e-SUAP - Teconlogie client

Il Progetto

Cittadini imprese professionisti

Ufficio SUAP

Enti PA (ASL, Vigili del Fuoco, etc..)

Cloud

Page 4: e-SUAP - Teconlogie client

e-SUAP

Tecnologie Client

Page 5: e-SUAP - Teconlogie client

Overview

•  Single Page Application •  HTML5 + CSS3 •  Durandal •  KnockoutJS •  Typescript •  Utils •  Bootstrap + Less •  QUnit

Page 6: e-SUAP - Teconlogie client

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

Page 7: e-SUAP - Teconlogie client

SPA - Caratteristiche

•  Chunking •  Controllers •  Templating •  Routing •  Real-time communication •  Local storage •  Testing

Page 8: e-SUAP - Teconlogie client

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

Page 9: e-SUAP - Teconlogie client

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

Page 10: e-SUAP - Teconlogie client

SPA - Templating

Manipolazione della UI e del DOM tramite scripting JavaScript

Binding dichiarativo tra dati e templates HTML

NoSPA SPA

Page 11: e-SUAP - Teconlogie client

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

Page 12: e-SUAP - Teconlogie client

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

Page 13: e-SUAP - Teconlogie client

SPA - Local storage

Carichi intensivi di dati dal server web Cookie

Capacità di memorizzare dati su un browser •  maggiori prestazioni •  accesso offline

NoSPA SPA

Page 14: e-SUAP - Teconlogie client

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

Page 15: e-SUAP - Teconlogie client

SPA - Pros & Cons

•  User Experience •  Alleggerimento del server •  JavaScript

•  Caricamento del client •  SEO •  JavaScript

Page 16: e-SUAP - Teconlogie client
Page 17: e-SUAP - Teconlogie client

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

Page 18: e-SUAP - Teconlogie client

HTML5 - What is new?

•  Nuovi elementi •  Nuovi attributi •  Supporto a CSS3 •  Video e Audio •  Grafica 2D/3D •  Local Storage •  Local SQL Database •  Web Applications

Page 19: e-SUAP - Teconlogie client

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

Page 20: e-SUAP - Teconlogie client

HTML5 - What is new?

Applicazioni: •  Local data storage •  Local file access •  Local SQL database •  Application cache •  Javascript workers •  XHTMLHttpRequest 2 •  Geolocalization

Page 21: e-SUAP - Teconlogie client

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.

Page 22: e-SUAP - Teconlogie client
Page 23: e-SUAP - Teconlogie client

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à

Page 24: e-SUAP - Teconlogie client

CSS3 - What is new?

•  Nuovi selettori •  Nuove proprietà •  Animazioni •  Trasformazioni 2D/3D •  Angoli arrotondati •  Ombreggiature •  Font scaricabili

Page 25: e-SUAP - Teconlogie client
Page 26: e-SUAP - Teconlogie client

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à

Page 27: e-SUAP - Teconlogie client

Durandal - Caratteristiche

•  Architettura MV* •  Modularità JavaScript e HTML •  Application Lifecycle •  Navigazione •  Programmazione asincrona con i promise •  Ottimizzazione •  Costruito su jQuery, Knockout e RequireJS

Page 28: e-SUAP - Teconlogie client
Page 29: e-SUAP - Teconlogie client

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

Page 30: e-SUAP - Teconlogie client

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

Page 31: e-SUAP - Teconlogie client

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

Page 32: e-SUAP - Teconlogie client

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

Page 33: e-SUAP - Teconlogie client
Page 34: e-SUAP - Teconlogie client

TypeScript

TypeScript è un linguaggio di programmazione superset di Javascript

Aggiunge tipizzazione statica e

programmazione orientata agli oggetti basata su classi

Page 35: e-SUAP - Teconlogie client

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

Page 36: e-SUAP - Teconlogie client
Page 37: e-SUAP - Teconlogie client

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à

Page 38: e-SUAP - Teconlogie client

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] …

Page 39: e-SUAP - Teconlogie client

JS Utils - Async

Async è una libreria JavaScript open source che fornisce potenti funzionalità per lavorare

con l’asincronia in JavaScript

Page 40: e-SUAP - Teconlogie client

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. });

Page 41: e-SUAP - Teconlogie client
Page 42: e-SUAP - Teconlogie client

Bootstrap

Bootstrap è un insieme di strumenti open source per la creazione di siti e applicazioni

web

Comprende template HTML+CSS ed estensioni JavaScript opzionali

Page 43: e-SUAP - Teconlogie client

Bootstrap - Componenti

Page 44: e-SUAP - Teconlogie client

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

Page 45: e-SUAP - Teconlogie client

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

Page 46: e-SUAP - Teconlogie client
Page 47: e-SUAP - Teconlogie client

QUnit

QUnit è un framework di test per JavaScript

Page 48: e-SUAP - Teconlogie client

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'); });

Page 49: e-SUAP - Teconlogie client

Alternative

Page 50: e-SUAP - Teconlogie client

Conclusioni

Sviluppare una SPA è più complesso rispetto allo sviluppo di una classica

applicazione Web

Page 51: e-SUAP - Teconlogie client

Conclusioni

La complessità si sposta sul client

Page 52: e-SUAP - Teconlogie client

Conclusioni

Le tecnologie si stanno raffinando

Page 53: e-SUAP - Teconlogie client

Domande?

Page 54: e-SUAP - Teconlogie client

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

Page 55: e-SUAP - Teconlogie client

Grazie

Page 56: e-SUAP - Teconlogie client

Nicola  Sanitate  

ApuliaSo=  s.n.c.  per  Code  Architects  s.r.l.  

nsanitate@apuliaoso=.com