Migrazione di Estatica al framework open source Symfony (parte I)

Pubblicato il 05/05/2009 - Last updated: 06/06/2009

Topic: Informatica

In questa serie di articoli voglio condividere vari aspetti tecnici delle fasi di migrazione di un grosso sito web come Estatica (Enciclopedia della musica italiana), all'utilizzo del framework open source PHP Symfony.

La scelta del linguaggio

PHP è stato uno dei primi linguaggi di script (insieme a Perl e ASP) che sono stati ideati appositamente per lo sviluppo di applicativi web.
Il fatto che sia uno dei linguaggi più "anziani" ha creato dei falsi luogi comuni: vediamo di sfatarne alcuni!

"Il PHP è un linguaggio per chi non sa programmare"

E' vero che spesso si vedono molti programmi mal progettati in PHP, vediamo di capirne le possibili cause tramite alcune considerazioni. Da notare che sarebbe stato più corretto dire "si vedevano", perchè sempre più spesso compaiono grossi progetti in PHP di elevata qualità progettuale.

  • Le prime versioni di PHP contenevano molti difetti di gioventù, mano a mano appianati con le successive evoluzioni del linguaggio.
    Dalla versione 4 di PHP è stato aggiunto un iniziale supporto alla programmazione a oggetti, che è diventato maturo con il PHP 5 e ha raggiunto un buon livello con il PHP 5.3
  • Molti progetti sono iniziati con vecchie versioni di PHP e spesso questioni economiche non permettono la loro riscrittura, portando dietro per anni i difetti di gioventù
  • Il numero delle persone che sviluppano siti e applicazioni in PHP è molto elevato rispetto ad altri linguaggi, di conseguenza anche il numero di persone che non sanno programmare è maggiore. Questa può sembrare una considerazione banale, ma non è così. Ben pochi programmatori alle prime armi si affacciano a linguaggi come il Perl, il Lisp o l'Eiffel.
  • Il linguaggio PHP permette di iniziare a sviluppare pagine con una curva di apprendimento molto bassa, quindi essendo l'ideale per chi inizia a programmare, ha tra le sue fila molti programmatori "in erba".
  • Il PHP permette di organizzare il codice tramite classi e metodi, oppure di utilizzare solamente funzioni, oppure di scrivere enormi paginate di codice. A differenza di altri linguaggi che costringono maggiormente il programmatore a seguire regole più rigorose, in PHP c'è maggiore libertà, con pro e contro connessi

 

"Il PHP è un linguaggio per fare piccoli siti; per siti più grossi è meglio utilizzare il Java o altri linguaggi."

Spesso in forum o blog si leggono affermazioni come quella sopra: ebbene non c'è niente di più falso e fuorviante, anzi possiamo dire che sotto molti aspetti è vero il contrario.
La realtà è che alcuni tra i più grossi siti sono realizzati in PHP: Wikipedia, Facebook, Yahoo! Answers. Aggiungete che i più utilizzati strumenti per blog (Wordpress), forum (PHPBB) e CMS (Joomla, Drupal) sono sviluppati in PHP.

Nel caso di Estatica, la scelta è stata semplicemente quella di continuare ad utilizzare il linguaggio che era stato usato per le versioni precedenti.

La versione 1.0 di Estatica (2007)

La versione 1.0 di Estatica, uscita nel 2007 era stata riscritta in PHP 5 dalle precedenti versioni PHP 3 / PHP 4, riorganizzando il codice in classi e metodi. Utilizzava librerie sviluppate ad hoc, più alcune librerie open source tra le quali Smarty. Smarty è un template engine che permette di separare il codice dell'applicazione dalla sua presentazione.

Negli ultimi mesi era stato introdotto l'utilizzo parziale di Doctrine, un ORM (Object Relational Mapper) cioè una libreria PHP che permette di accedere alle funzionalità di un database, con una visione orientata agli oggetti. Questo approccio ha vari vantaggi, tra cui flessibilità, necessità di scrivere meno codice e un ampio numero di utility già pronte per paginazione, fixture, ecc. ecc.

Perchè utilizzare un framework

Cos'è e perchè utilizzare un framework?

Da wikipedia:

"Nella produzione del software, il framework è una struttura di supporto su cui un software può essere organizzato e progettato. Alla base di un framework c'è sempre una serie di librerie di codice utilizzabili con uno o più linguaggi di programmazione, spesso corredate da una serie di strumenti di supporto allo sviluppo del software [...]

Lo scopo di un framework è di risparmiare allo sviluppatore la riscrittura di codice già steso in precedenza per compiti simili. Questa circostanza si è presentata sempre più spesso man mano che le interfacce utente sono diventate sempre più complesse, o più in generale man mano che è aumentata la quantità di software con funzionalità secondarie simili."

Utilizzare un framework, rispetto a scrivere completamente da se tutto il codice, porta numerosi vantaggi:

  • E' possibile occuparsi maggiormente del proprio progetto, tralasciando vari aspetti di cui si occupa il framework
  • Non si reinventa la ruota per riscrivere codice che è già stato scritto da altri
  • Si utilizzano librerie già testate da molte persone e quindi potenzialmente più sicure, flessibili e funzionali
  • Si possono usare dei task da riga di comando che generano automaticamente del codice PHP, per realizzare compiti ripetitivi
  • Si è portati ad una conformità nell'utilizzo di convenzioni. Le convenzioni derivano da svariati anni di esperienze di programmazione web e portano ad una maggiore leggibilità, mantenibilità e omogeneità del codice
  • Si scrive meno codice e quindi lo sviluppo risulta più rapido
  • Generalmente vengono offerte delle funzionalità integrate per testare il codice ed essere certi (se ben scritte) che modifiche successive apportate a parti del vostro programma, non provochino malfunzionamenti su altre parti.

 

La scelta del framework

Negli ultimi anni (direi dalla diffusione di PHP 5), stiamo assistendo ad una comparsa massiccia di framework scritti in PHP. Con l'aumentare del loro numero diventa sempre più ardua la scelta. Non è una cosa da poco utilizzarne uno piuttusto di un'altro, perchè comporta legare il proprio software a librerie sviluppate da terzi e parlando di open source, il rischio è quello di decidere di utilizzare un prodotto che da qui a qualche tempo potrebbe non essere più sviluppato e supportato. Facendo una cernita dei software più interessanti possiamo ridurre l'elenco ai seguenti nomi, anche se tale elenco è soggettivo e dipendente dalle esperienze professionali:

A questo punto la scelta si fà davvero difficile, perchè se è vero che ognuno ha delle caratteristiche distintive, sotto molti aspetti le caratteristiche si sovrappongono, ed inoltre ben poche persone avranno una conoscenza davvero approfondita per poter giudicare riguardo ai dettagli nell'utilizzo dei singoli framework.
Il noto Cake PHP l'ho scartato perché al momento ha deciso di mantenere la compatibilità con PHP 4, con tutti i compromessi che questo comporta.
Zend framework è quello che certamente può dare la massima affidabilità in quanto a mantenimento del codice, essendo sviluppato da Zend, la ditta fondata dagli ideatori del PHP, però al momento della scelta non aveva ancora implementato tutte le caratteristiche che ci si può aspettare da un framework completo: per certi versi era più simile ad un insieme di librerie. Questo non è più vero dalla versione 1.8 di Zend Framework, che implementa caratteristiche importanti quali Zend_Tool, Zend_CodeGenerator, Zend_Reflection, Zend_Tool_Project, ecc. All'epoca della scelta però questa versione non era ancora uscita
Alla fine considerando tutti gli aspetti e confrontando le caratteristiche presenti nei rispettivi siti, ho scelto di utilizzare Symfony. Tra i motivi principali della scelta ci sono:

  • l'ampia documentazione
  • una comunità fervida che partecipa a forum, mailing list e pubblica svariati blog con tips, considerazioni, miglioramenti, ecc.
  • lo sviluppo principale è realizzato da un core team, in cui dietro c'è una azienza
  • una grande disponibilità di plugin sviluppati da terzi

 

Da dove si parte?

Abbiamo un sito funzionante (quello di Estatica) online, continuamente aggiornato: dobbiamo farne una nuova versione riscritta da zero utilizzando symfony.
Non è pensabile di fare tutto in un colpo solo e sostituire l'interno vecchio sito con il nuovo: bisogna pianificare i lavori.
Ci sono diversi possibili approcci, da scegliersi in base a molte variabili quali il numero degli sviluppatori, il tempo previsto per la realizzazione, i tempi di consegna, le priorità, ecc.

Per potere rispondere al meglio a queste problematiche c'è una cosa da fare preliminarmente: studiare gli strumenti che si andranno ad utilizzare.
Riguardo a Symfony dicevamo che c'è già parecchia documentazione in inglese.
Però visto che è preferibile leggere in italiano, ho contribuito (insieme a Massimiliano Arione, Daniel Londero, Davide Borsatto, Luca Bernardi e Francesco Fullone) alla traduzione nella nostra lingua del libro "Practical symfony" di Fabien Potencier.
Il risultato di questi sforzi è "symfony in pratica - Creare applicazioni web professionali con PHP e symfony", nelle versioni "symfony 1.2|Doctrine" (quella utilizzata da me) e "symfony 1.2|Propel". Questa la lettura iniziale consigliata ad una persona che si avvicina per la prima volta a Symfony.
Per approfondire la gestione dei form, troviamo, sempre in italiano "I form symfony in azione".
Per concludere la carrellata sulla documentazione principale disponibile nella nostra lingua, segnaliamo "La guida definitiva a Symfony" (purtroppo per questioni "tecniche" disponibile solo su wiki), che nonostante sia riferita alla versione 1.1 è molto utile per avere una trattazione più organizzata e organica.

Aggiornamento

Vi segnalo che sono finalmente disponibili i libri in italiano su symfony!

symfony in pratica - Doctrine - seconda edizione (Italian Edition)
di Fabien Potencier; 394 pagine; ISBN13: 978-2-918390-08-4

symfony in pratica - Propel - seconda edizione (Italian Edition)
di Fabien Potencier; 396 pagine; ISBN13: 978-2-918390-09-1

La guida di riferimento a symfony 1.2 (Italian Edition)
di Fabien Potencier; 206 pagine; ISBN-10: 2918390100

I primi tre libri in italiano su symfony
Photography by Fabrizio Pucci