La risposta sintetica è: nessuno, sono tutti la stessa minestra!
Tutti i framework elencati cercano di distinguersi uno dall'altro, ma in realtà sono uno la copia dell'altro. Basta guardare le caratteristiche riportate sui loro siti o latabella comparativa di wikipedia .
CodeIgniter Yii framework CakePHP Zend framework Symfony Kohana Akelos DooPHP
Riassumendo hanno tutti le solite caratteristiche:
- paradigma ad oggetti
- design pattern MVC (Model View Controller)
- utilizzano sistemi di Object-relational mapping (ORM)
- Supporto all'i18n (ovvero multilingua)
e le solite non-caratteristiche:
- facile da usare
- veloce/performante
- flessibile
- stabile, affidabile
- sicuro
- interoperabile
- supportato dalla comunitÃ
- ben documentato
- ecc.
Se però analizziamo le caratteristiche pubblicizzate abbiamo quanto segue:
Paradigma ad oggetti OOP#
La sezione di wikipedia è più che esplicativa:http://en.wikipedia.org/wiki/Object-oriented_programming#Criticism
Design pattern MVC#
Di per sé l'idea è buona, ma unito alla OOP ha l'effetto di aumentare la complessità con una scarsità di benefici.
Il flusso logico dell'applicazione è sparpagliato in tanti file e utilizzando OOP tipicamente è nascosto dall'ereditarietà tra classi. Invece di leggere il flusso logico di un listato di codice in sequenza bisogna continuamente saltare da un file all'altro. Il risultato è che per aggiungere una funzionalità o modificare un programma che segue questo pattern, è di più il tempo che si passa a capire come innestarsi nella logica che si vuole modificare rispetto al tempo speso nell'operare la modifica.
Object-relational mapping (ORM)#
Anche in questo caso l'ORM è di fatto un tentativo di soluzione ai problemi introdotti dalla OOP nell'interazione con un DB.
Sicuri contro attacchi SQL Injection e XSS#
La tipica frase che si legge è: utilizza il nostro framework e in automatico la tua web application sarà sicura.
Di fatto però questa frase comunica allo sviluppatore un falso senso di sicurezza perché lascia intendere che ci penserà il framework a rendere sicura la web app, ma in realtà ciò non è possibile. Per sua natura infatti la sicurezza è un tema pervasivo di tutta la progettazione, lo sviluppo e il deploy di un applicazione e pertanto le minacce legate alla sicurezza devono essere chiare allo sviluppatore (non si può nascondere la testa sotto la sabbia).
Per di più la maggior parte dei framework sopra esposti non forniscono funzionalità realmente utili come l'escaping di HTML, Javascript ecc.
Conclusione#
Il difetto dei web framework è che sono troppo generici, perché vogliono consentire lo sviluppo di qualsiasi applicazione web, ma così facendo aggiungono uno strato di complessità fornendo in cambio funzionalità per lo più generiche.
Nel caso specifico del php inoltre già il linguaggio è pensato per il WEB e di conseguenza già il linguaggio ha tutto quello che serve per lo sviluppo di applicazioni WEB generiche.
Il risultato netto per utilizzare i framework sopra esposti è dover imparare oltre ad un linguaggio di programmazione come il PHP, un paradigma di programmazione OOP, un design pattern MVC e un framework che di fatto non aggiunge nulla, ma aumenta la complessità con tutto quello che ne deriva:
- programmi più buggati
- produttività rallentata
Soluzione#
L'unica soluzione è non usare un framework generico, ma utilizzare uno strumento di sviluppo specifico per il tipo di applicazione che si vuole creare.
Noi di Garda Informatica usiamo il META-Sviluppo RAPIDO, specifico per lo sviluppo di applicazioni gestionali web based.