Sulla Programmazione

Quattro chiacchere sulla programmazione e sulle bit-tecnologie con Fabrizio Cipriani

Il futuro di Play Framework

Mettiamo dobbiate avviare un nuovo progetto e vi chiedate se sia possibile incrementare produttività e fluidità del codice usando un nuovo framework di sviluppo.

Una buona scelta, se non lo usate già, può essere uno dei tanti framework che implementano il pattern architetturale MVC.

Ruby On Rails è uno dei framework più vecchi e consolidati, mentre è possibile rivolgersi verso Django per sfruttare la flessibilità di Python, Microsoft MVC per la potenza dei linguaggi e delle librerie .net, o Grails per la diffusione di Java (ce ne sono molti altri, non li cito tutti).

Play Framework è uno dei framework MVC più giovani e "caldi" degli ultimi tempi. Tra i suoi pregi:

  • Ricompilazione automatica al caricamento della pagina web
  • Modulare e facile da imparare
  • Template programmabili usando istruzioni type safe
  • Routing delle pagine web gestito in un unico file di configurazione con sintassi semplice e chiara
  • Funzionalità "scaffholding" permette che di generare immediatamente uno scheletro di applicazione con cui iniziare a lavorare
  • Scalabilità e performance attraverso il supporto di Http sincrono e asincrono.
  • Supporto di LESS e CoffeeScript
  • Integrazione di tools per il Test Driven Development
  • Supporto per la generazione automatica di forms a partire dal modello dati, inclusi i controlli di validazione

E' possibile sviluppare in Play usando sia il linguaggio Java che Scala. Scala in particolare è un recente linguaggio di programmazione, da catalogare tra i "linguaggi funzionali" (come python), e continua a ricevere molti consensi per la sua flessibilità e la sua potenza, ma anche varie critiche per la sua complessità.

Per avere un assaggio di cosa è possibile fare con Play! Framework è sufficiente seguire l'ottimo video di presentazione presente sulla home page del sito.

Un breve tutorial

Quello che segue è un breve crash course di Play Framework (in effetti chiamarlo "tutorial" è fargli un grosso complimento), il cui scopo è principalmente quello di dare un primo sguardo su un paio delle sua caratteristiche principali. Gli esempi sono realizzati in Linux Ubuntu, ma sono supportati anche Windows e MacOS.

Dopo aver scaricato ed installato il framework:

1. Creiamo il nostro primo progetto, al prompt digitiamo "play new crashcourse":

2. Abbiamo appena creato la nostra prima applicazione Play Framework! Possiamo testarla posizionandoci nella cartellina "crashcourse", e digitando "play run". Questa operazione lancia il server HTTP Netty fornito con il framework. Aprendo il browser all'indirizzo http://localhost:9000 è possibile vedere l'applicazione:

3. Proviamo a personalizzare il codice: apriamo il controller app/controllers/Application.java, creiamo la stringa che deve essere visualizzata nella nostra home page, e ritorniamola nel risultato.

public class Application extends Controller 
{      
    public static Result index() 
    {        
        String helloWorld = "Ok, ok, " + 
            "il solito 'Salve mondo!', ma non ci stufiamo mai?";        
        return ok(helloWorld);      
    }
}

4. Facciamo un refresh del browser. Il framework automaticamente ricompila il sorgente del controller e la pagina ora mostra la nostra stringa. Analizzando il sorgente della pagina vediamo che non c'è html. Vediamo come inserirlo usando il sistema dei template. Apriamo app/views/index.scala.html. In cima al file, ci sono i parametri che è possibile passare al template. Prendiamo il parametro @message ed utilizziamolo con del codice html:

@(message: String)

@main("Welcome to Play 2.1") 
{   

    <hr>   
    <h1>@message</h1>   
    <hr>

}

5. Dal controller app/controllers/Application.java invochiamo il metodo render() dell'oggetto template "index" (come vedete ha lo stesso nome del file), passando il testo che andrà a finire nel parametro @message visto sopra:

public class Application extends Controller 
{  
    public static Result index() 
    {    
        String helloWorld = "Ok, ok, " +      
            "il solito 'Salve mondo!', ma non ci stufiamo mai?";      
            return ok(index.render(helloWorld));   
    }
}

6. Eseguendo il refresh del browser, il nuovo codice viene compilato e vedremo apparire l'html generato dal template. Da notare che app/views/index.scala.html invoca a sua volta un altro template, app/views/main.scala.html, che contiene il layout generale della nostra applicazione.

Il futuro di Play Framework

Ma quanto è "caldo" Play Framework? 

La mailing list degli sviluppatori è molto attiva. Se analizziamo il trend delle ricerche sul motore di ricerca Google, possiamo osservare che è in crescita costante. Il famoso LinkedIn ha annunciato di volere portare un numero sempre maggiore dei suoi moduli su Play Framework, ma bisogna dire che a parte questo esempio, il numero di siti web rilevanti che usano Play Framework è ancora piuttosto limitato.

Per chi volesse compararlo all'altro grande framework MVC per Java, Grails, esiste un'ottimo studio comparativo dei due ambienti aggiornato a marzo 2013 (l'impressione è che gli autori aggiornino periodicamente i dati dello studio tenendo traccia dell'evoluzione dei due framework).

E' oramai qualche settimana che uso Play a casa, e devo dire di trovarmi molto bene con i template, il suo MVC, l'ORM (che evolve automaticamente lo schema del database quando le classi del modello dati vengono modificate) ed il modello di sviluppo in generale.

Occorre dire che il framework non è privo di difetti.

La documentazione, per un progetto che riceve tanto interesse, è carente in modo quasi imbarazzante.

Si ha continuamente l'impressione che per sfruttare appieno le possibilità del framwork convenga abbandonare Java per passare a sviluppare completamente Scala, il quale, checchè  ne dicano i creatori del framework, tra i due linguaggio supportati è decisamente privilegiato.

EBean, l'ORM di default, una delle migliori sorprese del framework, possiede una comunità non proprio iperattiva.

Conclusioni

Malgrado le ottime prospettive, dubito che consiglierei di utilizzare Play Framework per avviare un progetto da mandare in produzione, se non forse usando solamente Scala. 

Play Framework rimane un progetto da seguire con grande attenzione, e continuerò a trattarlo nei prossimi post di questo blog.

Comments