domenica 8 novembre 2015

PrimeFaces come API e MaterialPrime

Nell'ultimo incontro del JUG (05 Nov 2015) siamo stati ospitati da Oracle Italia che, tramite la preziosa collaborazione di Nino Guarnacci, ci ha aperto le porte alla propria eccezionale sala conferenze.
Forse colpevole l'ora o la zona poco favorevole, è stato un peccato che l'affluenza effettiva fosse ridotta, perché il tema è stato a mio avviso molto interessante, pratico e presentato con grande efficacia da Francesco Strazzullo.

Per chi non ha potuto esserci eccovi un breve riassunto.

Introduzioni


In attesa dei ritardatari abbiamo approfittato per guardarci in faccia e fare le presentazioni, in particolare Strazzullo ci ha raccontato della sua attività di sviluppatore java oramai convertito in front-end puro e quindi con una buona esperienza di javascript e del suo ecosistema. Nell'azienda di Ancona di cui è parte, e-xtrategy, si occupa infatti di realizzare design front-end per i clienti, collabora da qualche tempo con il sito di articoli online cosenonjaviste.it e fa parte del collettivo di sviluppatori delle Marche (dev.marche.it).

Infine, cosa essenziale al nostro incontro, Francesco è contributor del progetto PrimeFaces Extensions e in particolare uno degli sviluppatori di MaterialPrime, una libreria di componenti JSF, basata su PrimeFaces, che realizza il design Material di Google.

PrimeFaces, ci racconta Francesco, è la libreria di fatto più utilizzata ad oggi per la realizzazione di componenti JSF, avendo da tempo superato le alternative RichFaces e IceFaces.

La libreria, PrimeFaces e MaterialPrime


In breve, PrimeFaces è una libreria che rende disponibile tramite componenti JSF le funzionalità della onnipresente jQuery. L'utilizzo è gratuito, a patto di condividere sul repository ufficiale ogni componente personalizzato dall'utente, in modo da arricchire sempre più i componenti disponibili a chi inizia.
Altra caratteristica di PrimeFaces, come anticipa lo speaker, è che si presta bene per la creazione di componenti personalizzati, utilizzando il framework e le sue API.

Ogni componente è suddiviso in una parte client javascript, che si occupa dell'interazione lato browser, e una server, in java, divisa in un componente che esegue la logica di dominio e un renderer per la generazione di html.
Quest'ultimo aspetto purtroppo rimane poco sofisticato: il markup va scritto tramite stringhe, benché io abbia intravisto delle API che semplificano la generazione di tag e attributi.

A questo punto la presentazione passa ad un esempio dettagliato di come scrivere e integrare le diverse parti di un componente personalizzato. L'elemento chiave è il riutilizzo delle funzionalità previste dalla libreria, che garantiscono diverse cose essenziali: avere a disposizione un sistema di eventi, attributi, chiamate ajax, nonché la gestione dello stato lato server. Inoltre questo modello garantisce un'uniformità nello sviluppo e l'utilizzo, in modo che gli utilizzatori finali della libreria si trovino a proprio agio anche utilizzando componenti nuovi.

Personalmente trovo che il pregio fondamentale di questo sistema sia la possibilità di intervenire sul componente da due fronti, lavorando in java sul back-end e direttamente in javascript sul front-end. In questo modo è molto semplice integrare librerie di entrambi gli ecosistemi, in modo essenzialmente trasparente.

Tanto per chiarire questo punto, Strazzullo ci spiega come MaterialPrime non faccia altro che richiamare internamente alla parte client dei suoi componenti una libreria javascript di nome materializecss, la quale si occupa di realizzare la parte grafica e la logica secondo le linee guida dello stile di Google.


Difetti


Ovviamente non ci sono solo lati positivi, ma anche qualche pecca. In particolare Francesco segnala che il codice del framework è poco documentato essendo essenzialmente uno strumento interno. Per lo stesso motivo, ad ogni rilascio di qualche aggiornamento c'è sempre il rischio che vengano introdotte modifiche non compatibili, da cui la necessità di eseguire dei controlli di regressione ogni qualvolta si aggiorna la versione su cui basare i propri componenti.


Conclusioni


Devo dire che data la mia maggiore esperienza con librerie più recenti, quali GWT e Vaadin, sono rimasto piacevolmente sorpreso di vedere come una tecnologia che a causa di un pregiudizio avevo considerato sorpassata fornisca in realtà una buona flessibilità e una serie di strumenti validi per costruire interfacce utente di tutto rispetto. In effetti MaterialPrime dimostra questo: che JSF non deve essere per forza associata ad una grafica scadente o ad un design "da svecchiare".

Questa mi sembra un'ottima notizia, soprattutto per tutti gli sviluppatori che, lavorando su prodotti legacy o con lo standard JEE, possono aver immaginato di non avere speranze per quanto riguarda la possibilità di realizzare un front-end al pari con gli strumenti più attuali sul panorama.

Grazie ancora a Francesco Strazzullo e al suo collega Michele Focanti che ci hanno raggiunto da Ancona per condividere con noi la loro esperienza.

Ivano Pagano


Ecco il link con le slide della presentazione

Per ulteriori informazioni vi rimando al sito di Francesco e al progetto su github


1 commento: