Articoli

logo articolo

Perchè Laravel Come Framework PHP ?

Il mondo dei Framework PHP è in continua evoluzione e la lista è talmente lunga che citarli tutti è difficile. Alcuni tra i più famosi sono: Zend, Symfony, Code Igniter, CakePHP e Yii. Da qualche anno un nuovo contendente è entrato a far parte di questa lista, ed ha da subito riscosso un grande successo: Laravel

Scegliere un Framework può essere una decisione non semplice. Personalmente ho sempre pensato che non sia giusto individuare un framework 'preferito' e sostenerlo a spada tratta, ma la scelta dovrebbe essere fatta in funzione del tipo di applicazione da realizzare e dai requisiti che presenta. Dall'avvento di Laravel però si ha la sensazione che molti Framework 'minori' stiano perdendo sostenitori, attirati dal nuovo arrivato. Cerchiamo di capire perchè.

Laravel : PHP Moderno

Tempo fa mi è capitato di lavorare con Laravel e fin da subito ho apprezzato le sue caratteristiche. Da sempre sono amante di codice scritto in maniera elegante e pulita, che aderisca il più possibile alle best practices e faccia uso intelligente di design patterns. Usando Lavarel si ha l'impressione che Taylor Otwell (il creatore di Laravel) abbia seguito questa linea di pensiero durante lo sviluppo, tant'è che l'epiteto con cui Laravel si presenta è : "The PHP Framework For Web Artisans",  proponendosi di fare dell'espressività, leggibilità e pulizia del codice le sue armi vincenti.

Non è semplice riassumerne le caratteristiche peculiari, ma trovo che i punti di forza che fanno di Laravel un framework elegante e moderno siano:

  • Codice elegante, conciso ed espressivo
  • Supporto nativo di Unit Test
  • Segue buoni design priciples (SOLID)
  • Dependency Injection automatica tramite binding nell'IoC Container
  • Composer
  • Middleware
  • Facile da usare rispetto a Symfony e Zend
  • Nasce dall'esigenza di garantire una semplicità proria dei framwork 'minori' (ad esempio CodeIgniter), superandone però i limiti (ad esempio l'estensibilità)
  • Routing semplice e pulito

Alcune di queste feature sembrano essere talmente azzeccate che anche il colosso Zend ha annunciato di volerle integrare nella roadmap per Zend Framework 3 (ad esempio l'uso di Composer e del concetto di Middleware )

Critiche e Facades

Quando una nuova tecnologia si affaccia all'orizzonte, soprattutto se colleziona grandi successi nella comunità, i sostenitori delle tecnologie concorrenti spesso iniziano a manifestare perplessità. Laravel non è stato un'eccezione, e, particolarmente nella prima fase di vita, sono state mosse molte critiche nei suoi confronti.

Una delle critiche più comuni era riferita al fatto che Laravel è ricco di chiamate a metodi statici. I programmatori più esperti sanno quanto l'uso eccessivo di metodi statici sia considerato una bad-practice, in quanto promuove l'utilizzo di pratiche anti-OOP, principalmente per via della loro scarsa testabilità e del fatto che rappresentino uno stato globale. Anche io rimasi colpito negativamente da questa caratteristica, ma imparando a conoscere il framework si capisce che queste invocazioni statiche sono semplicemente dei metodi di utilità chiamati Facades (da non confondere con l'omonino design pattern), che implementano il Service Locator Pattern e  permettono di risolvere in maniera dinamica dei binding nell'IoC Container dell'applicazione per la creazione di istanze di oggetti. Modificando quindi i binding, è possibile modificare anche gli oggetti istanziati, rendendo il codice perfettamente testabile.

Alcuni sostengono che le Facades siano comunque chiamate statiche e in qualche modo 'nascondano' nel codice le di dipendenze delle varie classi. La cosa bella è che Laravel non ci costringe ad usarle: infatti possiamo tranquillamente usare la Dependency Injection a livello dei costruttori per iniettare automaticamente le dipendenze nelle nostre classi, invece di utilizzare le Facades all'interno dei metodi. La scelta spetta quindi allo sviluppatore e l'utilizzo delle Facades spesso risulta utile in tutti quei casi in cui le dipendenze sono meno importanti e si preferisce ricorrere a codice sintetico, come ad esempio nei file delle viste.

In definitiva quindi si può dire che le Facades siano una maniera (opzionale) di adottare una sintassi concisa ed espressiva, mantenendo allo stesso tempo il codice testabile.

Non è Tutto Oro quel che Luccica

Possiamo quindi dire che Laravel sia il framework perfetto e che surclassi tutti gli altri? Probabilmente no, perchè come ogni tecnologia presenta degli aspetti negativi:

  • La facilità di utilizzo delle Facades  può 'ingolosire' sviluppatori meno esperti e promuovere l'uso di bad practices, come creare molte dipendenze implicite all'interno delle classi
  • Leggendo la documentazione o cercando snippet di codice già scritti, esso appare molto comprensibile, ma quando qualcosa inizia ad andare storto ed è necessario 'sporcarsi le mani' andando ad esaminare il core di Laravel, ci si rende conto che internamente Laravel non è così semplice; anzi, spesso si utilizzano intensivamente magic methods e altre feature dinamiche che rendono il debugging un'operazione lenta e complicata
  • Ancora relativamente giovane rispetto ad alcuni concorrenti e non presenta una gamma di moduli vasta come, ad esempio, Symfony e Zend

In Conclusione

Dopo aver esaminato questi aspetti e dall'esperienza che ho maturato, mi sento di poter dire che Laravel rappresenti al meglio il presente e il futuro dei Framework PHP. Semplicemente perchè sta di fatto spazzando via la concorrenza (basta guardare l'andamento temporale dei tags su Stack Overflow o cercare su Google Trends) e vedo davvero pochi motivi validi in base ai quali oggi uno sviluppatore possa decidere di scegliere un altro Framework, avendo Laravel a disposizione.

Anche se probabilmente Symfony è ancora la scelta più indicata per le soluzioni 'enterprise' ( grandi applicazioni, team di sviluppo numerosi ) penso che Laravel oggi sia lo strumento ideale per lo sviluppo di una vasta gamma di applicazioni e siti web, e, insieme all'avvento di PHP7, stia portando PHP verso una nuova frontiera, dove potrà finalmente concludere il suo processo di modernizzazione e permettere agli sviluppatori che lo utilizzano di creare, divertendosi, applicazioni robuste, veloci e sicure.