smartclient by isomorphic - rich internet applications

13
Claudio Bosticco [email protected]

Upload: claudio-bosticco

Post on 20-Jul-2015

661 views

Category:

Software


1 download

TRANSCRIPT

Claudio Bosticco

[email protected]

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 l’intera 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 l’altro (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 dell’applicazione.

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 l’utente è autorizzato a vedere/aggiornare – solo il server può garantire la sicurezza).

La presentazione dei dati all’utente 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 l’acronimo. LGPL da 11/2007 (parte client). Perfettamente in linea con l’architettura 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 frameworkrispetto 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, l’oggetto ClassFactory è alla base di un

meccanismo di vera ereditarietà per oggetti Javascript.

Questo significa che con gli oggetti SmartClient è possibileinvocare metodi delle superclassi, avere attributi e metodidi istanza ma anche statici.

ClassFactory è un sigleton che viene utilizzatoprincipalmente per definire nuove classi: ClassFactory.defineClass("MyClass", “MySuperClass");

Per creare un’istanza: ClassFactory.newInstance(“MyClass”);

Coding – syntactic sugarisc.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 un’instanza 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”