際際滷

際際滷Share a Scribd company logo
Claudio Bosticco
Claudio.bosticco@gmail.com
WEB 1.0
 Ad ogni interazione, il browser invia una richiesta ad una
specifica risorsa (URL) con dei parametri associati alla richiesta.
 Il web server risponde con lintera pagina: HTML+CSS+Javascript
 La pagina contiene sia il codice necessario alla sua
renderizzazione, sia i dati.
  una caratteristica storica di html over http
Inoltre il client 竪 pi湛 o meno stupido:
business logic e presentazione sono interamente in mano al server
WEB 1.0: flaws
 I dati non sono trattati come first class objects
(non hanno n辿 tipo, n辿 struttura, n辿 vincoli).
 Presentation Flow e Data Interchange, che sono ortogonali,
risultano strettamente accoppiati, uno non pu嘆 avvenire senza
che avvenga laltro (Ajax, alternativo a hmtl over http, li
disaccoppia).
 Non supporta server push.
Esiste un web framework server-side che non abbia tali difetti?
RIA (web 2.0)
 Al primo accesso alla web application, viene scaricato il
codice client della webapp stessa.
 Il browser 竪 il contenitore dellapplicazione.
 Da questo punto, se il client ha bisogno di dati che non ha, o
se deve aggiornare/aggiungere dati, invia una richiesta al
server.
 Il server invia/aggiorna i dati (quelli che lutente 竪
autorizzato a vedere/aggiornare  solo il server pu嘆
garantire la sicurezza).
 La presentazione dei dati allutente viene gestita lato client.
RIA Architecture
 Un paper illuminante: Life above the Service Tier:
Had we but invested in clientside JavaScript half the resources we invested in
serverside Java, we could have had AJAX far earlier (and we could have
avoided wasting our time on fifty different Front Controller frameworks).
 MVC sul client: presentation flow tramite javascript magic:
Single Page Application.
 Ajax per disaccoppiare presentation flow e data interchange
 XML o JSON restituiscono dignit ai dati
Life Above the Service Tier
SmartClientTM RIA Framework
 Since 2001, architettura client side MVC, Ajax da prima che
esistesse lacronimo.
 LGPL da 11/2007 (parte client).
 Perfettamente in linea con larchitettura SOFEA.
 Componenti client molto ricchi.
 Ampia compatibilit coi browser (IE6 ancora compatibile con la
release 10 uscita a fine 2014), anche sul mobile.
 Sistema di databinding client/server: i business objects sono
modellati nelle DataSource che sono condivise tra client e
server.
 Tramite le DataSource stesse 竪 disponibile un motore di
persistenza molto efficace (oppure connettori per
JPA/Hibernate).
SmartClient DataSources
 Il mio consiglio 竪, se possibile, di usare le SQLDataSource,
possibilmente con licenza Power (ovviamente a patto di
usare un db relazionale).
 La velocit di sviluppo che si ottiene rispetto ad altri
framework e anche rispetto ad altri ORM (Hibernate,
myBatis) vale la spesa.
 Ovviamente richiede maggiori conoscenze del framework
rispetto ad utilizzare solo la versione LGPL ad es.
Licensing
 LGPL -> solo parte client (esclusi alcuni moduli)
A costi crescenti:
 Pro
 Power
 Enterprise
Moduli a parte:
 RealTime Messaging (AKA server push)
 Analytics (OLAP/Datacube)
Exploring SmartClient
 Il pacchetto contiene una SDK con un tomcat e un HSQLDB
embedded con documentazione ed esempi ricercabili ed
editabili.
 La documentazione 竪 molto ben fatta, ma per i principianti 竪 un
po difficile visualizzare la big picture viste le dimensioni del
framework.
  consigliabile iniziare dalla quick start guide, per poi
approfondire le tematiche nella cartella Concepts della
Reference (e nella cartella Java Server Reference se si utilizza la
parte server).
 Fondamentale smanettare sugli esempi ed iniziare da subito ad
utilizzare la developer console.
Un esempio dalla SDK
Coding in SmartClient
 In SmartClient, loggetto ClassFactory 竪 alla base di un
meccanismo di vera ereditariet per oggetti Javascript.
 Questo significa che con gli oggetti SmartClient 竪 possibile
invocare metodi delle superclassi, avere attributi e metodi
di istanza ma anche statici.
 ClassFactory 竪 un sigleton che viene utilizzato
principalmente per definire nuove classi:
 ClassFactory.defineClass("MyClass", MySuperClass");
 Per creare unistanza:
 ClassFactory.newInstance(MyClass);
Coding  syntactic sugar
isc.defineClass("MyListGrid", "ListGrid").addProperties({
headerHeight: 40, // cambia default per listGrid.headerHeight
// override listGrid.recordClick
recordClick: function (viewer, record) {
isc.say(record.description); // invece di alert()
}
})
isc.MyListGrid.create({ // crea uninstanza della nuova classe
ID: fooGrid // variabile globale
});
fooGrid.fetchData(
{STATE: ACCEPTED}, // criteria
function(dsResponse, data, dsRequest){ // callback
isc.logEchoAll(data);
}
})
Il prefisso isc. 竪 necessario se si usa il Portal mode

More Related Content

Similar to SmartClient by Isomorphic - Rich internet applications (20)

Many Designs Elements
Many Designs ElementsMany Designs Elements
Many Designs Elements
Giampiero Granatella
AngularJS Reinventare le applicazioni web
AngularJS  Reinventare le applicazioni webAngularJS  Reinventare le applicazioni web
AngularJS Reinventare le applicazioni web
Luca Milan
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
Whymca
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
Luca Masini
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
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
Novit di Asp.Net 4.0
Novit di Asp.Net 4.0Novit di Asp.Net 4.0
Novit di Asp.Net 4.0
Gian Maria Ricci
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
Andrea Colleoni
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
Sabino Labarile
Ajaxare WordPress
Ajaxare WordPressAjaxare WordPress
Ajaxare WordPress
Salvatore Laisa
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
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
Andrea Picchi
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
DotNetCampus
PHP Serverless in ambiente AWS
PHP Serverless in ambiente AWSPHP Serverless in ambiente AWS
PHP Serverless in ambiente AWS
Gianfranco Castro
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
DotNetCampus
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?
Andrea Agnoletto
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
Claudio Gandelli
Data binding libera tutti!
Data binding libera tutti!Data binding libera tutti!
Data binding libera tutti!
Salvatore Laisa
Data binding libera tutti!
Data binding libera tutti!Data binding libera tutti!
Data binding libera tutti!
Appsterdam Milan
AngularJS Reinventare le applicazioni web
AngularJS  Reinventare le applicazioni webAngularJS  Reinventare le applicazioni web
AngularJS Reinventare le applicazioni web
Luca Milan
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
Whymca
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
Luca Masini
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
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
Introduzione a Struts
Introduzione a StrutsIntroduzione a Struts
Introduzione a Struts
Andrea Colleoni
E suap - tecnologie client
E suap - tecnologie client E suap - tecnologie client
E suap - tecnologie client
Sabino Labarile
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e AjaxProgettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Progettazione e sviluppo di applicazioni web 2.0 con PHP e Ajax
Giovanni Cappellini
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
Andrea Picchi
Fe02 ria con breeze e knockout
Fe02   ria con breeze e knockoutFe02   ria con breeze e knockout
Fe02 ria con breeze e knockout
DotNetCampus
PHP Serverless in ambiente AWS
PHP Serverless in ambiente AWSPHP Serverless in ambiente AWS
PHP Serverless in ambiente AWS
Gianfranco Castro
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
DotNetCampus
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?
Andrea Agnoletto
Hands on MVC - Mastering the Web
Hands on MVC - Mastering the WebHands on MVC - Mastering the Web
Hands on MVC - Mastering the Web
Claudio Gandelli
Data binding libera tutti!
Data binding libera tutti!Data binding libera tutti!
Data binding libera tutti!
Salvatore Laisa
Data binding libera tutti!
Data binding libera tutti!Data binding libera tutti!
Data binding libera tutti!
Appsterdam Milan

SmartClient by Isomorphic - Rich internet applications

  • 2. WEB 1.0 Ad ogni interazione, il browser invia una richiesta ad una specifica risorsa (URL) con dei parametri associati alla richiesta. Il web server risponde con lintera pagina: HTML+CSS+Javascript La pagina contiene sia il codice necessario alla sua renderizzazione, sia i dati. una caratteristica storica di html over http Inoltre il client 竪 pi湛 o meno stupido: business logic e presentazione sono interamente in mano al server
  • 3. WEB 1.0: flaws I dati non sono trattati come first class objects (non hanno n辿 tipo, n辿 struttura, n辿 vincoli). Presentation Flow e Data Interchange, che sono ortogonali, risultano strettamente accoppiati, uno non pu嘆 avvenire senza che avvenga laltro (Ajax, alternativo a hmtl over http, li disaccoppia). Non supporta server push. Esiste un web framework server-side che non abbia tali difetti?
  • 4. RIA (web 2.0) Al primo accesso alla web application, viene scaricato il codice client della webapp stessa. Il browser 竪 il contenitore dellapplicazione. Da questo punto, se il client ha bisogno di dati che non ha, o se deve aggiornare/aggiungere dati, invia una richiesta al server. Il server invia/aggiorna i dati (quelli che lutente 竪 autorizzato a vedere/aggiornare solo il server pu嘆 garantire la sicurezza). La presentazione dei dati allutente viene gestita lato client.
  • 5. RIA Architecture Un paper illuminante: Life above the Service Tier: Had we but invested in clientside JavaScript half the resources we invested in serverside Java, we could have had AJAX far earlier (and we could have avoided wasting our time on fifty different Front Controller frameworks). MVC sul client: presentation flow tramite javascript magic: Single Page Application. Ajax per disaccoppiare presentation flow e data interchange XML o JSON restituiscono dignit ai dati
  • 6. Life Above the Service Tier
  • 7. SmartClientTM RIA Framework Since 2001, architettura client side MVC, Ajax da prima che esistesse lacronimo. LGPL da 11/2007 (parte client). Perfettamente in linea con larchitettura SOFEA. Componenti client molto ricchi. Ampia compatibilit coi browser (IE6 ancora compatibile con la release 10 uscita a fine 2014), anche sul mobile. Sistema di databinding client/server: i business objects sono modellati nelle DataSource che sono condivise tra client e server. Tramite le DataSource stesse 竪 disponibile un motore di persistenza molto efficace (oppure connettori per JPA/Hibernate).
  • 8. SmartClient DataSources Il mio consiglio 竪, se possibile, di usare le SQLDataSource, possibilmente con licenza Power (ovviamente a patto di usare un db relazionale). La velocit di sviluppo che si ottiene rispetto ad altri framework e anche rispetto ad altri ORM (Hibernate, myBatis) vale la spesa. Ovviamente richiede maggiori conoscenze del framework rispetto ad utilizzare solo la versione LGPL ad es.
  • 9. Licensing LGPL -> solo parte client (esclusi alcuni moduli) A costi crescenti: Pro Power Enterprise Moduli a parte: RealTime Messaging (AKA server push) Analytics (OLAP/Datacube)
  • 10. Exploring SmartClient Il pacchetto contiene una SDK con un tomcat e un HSQLDB embedded con documentazione ed esempi ricercabili ed editabili. La documentazione 竪 molto ben fatta, ma per i principianti 竪 un po difficile visualizzare la big picture viste le dimensioni del framework. consigliabile iniziare dalla quick start guide, per poi approfondire le tematiche nella cartella Concepts della Reference (e nella cartella Java Server Reference se si utilizza la parte server). Fondamentale smanettare sugli esempi ed iniziare da subito ad utilizzare la developer console.
  • 12. Coding in SmartClient In SmartClient, loggetto ClassFactory 竪 alla base di un meccanismo di vera ereditariet per oggetti Javascript. Questo significa che con gli oggetti SmartClient 竪 possibile invocare metodi delle superclassi, avere attributi e metodi di istanza ma anche statici. ClassFactory 竪 un sigleton che viene utilizzato principalmente per definire nuove classi: ClassFactory.defineClass("MyClass", MySuperClass"); Per creare unistanza: ClassFactory.newInstance(MyClass);
  • 13. Coding syntactic sugar isc.defineClass("MyListGrid", "ListGrid").addProperties({ headerHeight: 40, // cambia default per listGrid.headerHeight // override listGrid.recordClick recordClick: function (viewer, record) { isc.say(record.description); // invece di alert() } }) isc.MyListGrid.create({ // crea uninstanza della nuova classe ID: fooGrid // variabile globale }); fooGrid.fetchData( {STATE: ACCEPTED}, // criteria function(dsResponse, data, dsRequest){ // callback isc.logEchoAll(data); } }) Il prefisso isc. 竪 necessario se si usa il Portal mode