Code less. Do more.

Con questo slogan si visualizza la prima pagina di www.qcodo.com, il sito di Qcodo, un
nuovo framework per PHP. Aspettate, un momento, potete dire che noia! Un nuovo framework per PHP!...

Avete ragione, PHP ha un numero incredibile di framework. Questa volta non si tratta della solita raccolta di funzioni ed oggetti che vi semplificano la vita, ma vi sto parlando di un nuovo modo di programmare. Alcuni framework, e non solo in PHP, fanno uso della metaprogrammazione. Con la metaprogrammazione di solito viene analizzato il database in tempo reale e vengono fornite le funzionalità basilari per inserire, cancellare, modificare i record (CRUD). In piu` ogni tabella viene mappata e sempre in tempo reale viene fornita la possibilita di accedere ai dati per mezzo dei oggetti (ORM). Alcuni framework che utilizzano la metaprogrammazoine sono: Ruby on Rails, Cake, Hibernate, NHibernate e Zend PHP Framework. Piu` precisamente utilizzano il design pattern Active Record definito da Martin Flower. Qcodo fa qualcosa del genere ma con la tecnica della generazione del codice. Quale è la differenza? La generazione del codice avviene una volta sola durante lo sviluppo, su richiesta, la metaprogrammazione è in real-time, ovvero in tempo reale. La metaprogrammazione ha quindi un decadimento in performance, la generazione del codice no, ma non finisce qui. Quello che trovo geniale in Qcodo è che elimina il principale problema della generazione del codice: la perdita delle personalizzazioni. In pratica viene configurata una connessione ad un database, poi viene eseguita la generazione del codice. A questo punto abbiamo dei file contenenti tutte le funzionalità principali. Possiamo ora personalizzare il codice e completare il programma, cosa non possibile con la metaprogrammazione dove il comportamento è dinamico, od almeno non si puo` personalizzare con del codice in un file in modo tradizionale. Il problema si viene a creare quando il database cambia, rigeneriamo il codice e le nostre personalizzazioni vengono cancellate. Qcodo ovvia questo a problema ed usando in pieno la programmazione orientata agli oggetti crea le funzionalità principali generate da una parte, poi da un’altra crea delle sottoclassi che estendono le classi generate. Cosi nelle sottoclassi possiamo fare le nostre personalizzazioni e se rigeneriamo il tutto le classi generate sono ricreate mentre le sotto classi rimangono con le personalizzazioni! Cosi abbiamo tutti i vantaggi e nessun problema di rilievo.

La generazione del codice in Qcodo è solamente la meta` delle funzionalità. L’altra meta` sono le QFroms. Si tratta di un sistema completo praticamente di tutto, creazione di forms stateful, cioè che eliminano il problema di provvedere ad una persistenza dei dati tra una pagina ed un’altra, proprio come nelle applicazioni desktop. Le QForms sono event-driven, dove per ogni evento generato possiamo scrivere il codice. Anche il design pattern MVC viene utilizzato: il rendering delle pagine è gestito separatamente, i dati sono gestiti dagli oggetti ORM. La validazione dei dati è sia client-side che server-side, a nostra scelta. Inoltre possiamo, cambiando un semplice metodo, trasformare la nostra applicazione in una AJAX!

Vi domanderete: ma dove stanno i soliti svantaggi? Sicuramente lo scoglio principale è l’apprendere l’utilizzo delle QForms e la personalizzazione del codice generato, ma io credo che ne valga la pena. Inoltre Qcodo è sempre in beta. È utilizzabile per fare delle applicazioni di quelita` ma non è proprio del tutto completo. Io sto cercando di migliorare l’adapter per utilizzare Oracle, mentre sono disponibili quelli per Mysql, MSSql, Postgresql ed ora ne esiste anche uno per ADODB.

Chi utilizza QCodo? Il creatore, Mike Ho, lavora per alcune aziende come NASA e Lockeed Martin utilizzando il framework con successo.

Riccardo Tacconi rtacconi(@)gmail.com

________________

""