
Un framework in informatica è uno strumento che offre funzionalità comunemente utilizzate da developer per creare altre funzionalità più complesse; sono disponibili framework più grezzi che offrono solo mattoncini da combinare (una libreria per gestire chiamate ajax può essere utilizzata per realizzare una funzionalità di login) oppure altri che offrono strumenti a più alto livello di astrazione come dei sistemi per gestire le autorizzazioni dopo la login.
Utilizzare un framework già pronto offre diversi benefici:
Allo stesso tempo, però, realizzare un proprio progetto basato su un framework così largamente utilizzato, significa dover continuamente scaricare l’ultima release del framework e aggiornare il proprio progetto (un pò come avviene con WordPress) perchè se il framework in questione non venisse aggiornato ad ogni release di sicurezza, il progetto sarebbe facilmente attaccabile da chiunque conosca i bug di sicurezza resi pubblici ad ogni aggiornamento.
Ma quando viene eseguito un aggiornamento del framework, questo potrebbe impattare il funzionamento del progetto realizzato sul framework (come avviene ad esempio quando WordPress viene aggiornato ed alcuni plugin smettono di funzionare).
C’è anche un altro rischio che si corre basando il proprio progetto su un framework realizzato da altri: potrebbe accadere quello che è successo con un framework molto utilizzato in ambito PHP in passato, Zend Framework, che è stato abbandonato dal team di sviluppo e preso in carico da un’altra realtà che ne ha cambiato non soltanto il nome e il logo, ma ovviamente ha variato diverse caratteristiche che rendevano non funzionanti i progetti che avevo sviluppato e che erano in produzione dai miei clienti da anni e mi avrebbero costretto a modificare parti di software già sviluppate, consegnate e fatturate. In questo caso persi molto tempo per capire cosa era cambiato e come adattare dei progetti che funzionavano da anni. Decisi di creare un framework che contenesse tutto ciò che avevo imparato dalla progettazione di Zend Framework e quella che era stata la mia esperienza (ad esempio, ho aggiunto la possibilità di criptare i dati in maniera nativa).
E’ ottimizzato, modificabile e adattabile al 100%: a ciò che serve, anche nelle parti core che non andrebbero modificate nei framework già pronti. Non è necessario seguire una roadmap della community che segue il progetto (come è successo con Zend Framework);
Ma le controndicazioni di questa opzione sono molte e ed è una scelta che va presa con attenzione: se il framework fosse stato realizzato da un solo soggetto che non ha mai utilizzato altri framework, un solo linguaggio di programmazione, non avesse studiato e utilizzato best practises per anni, allora potrebbe progettarlo male e scriverlo ancora peggio provocando danni ai progetti.
Dopo anni di Zend Framework, quando il progetto è stato chiuso, ho mantenuto la struttura e implementato nuove funzioni seguendo le best practise acquisite da Zend Framework e dai framework offerti dagli altri linguaggi (come Java/J2EE, col quale ho lavorato per anni in maniera approfondita).
Scegliere se realizzare un progetto con un framework o un altro, oppure da zero, è una scelta che va presa con molta serietà. Negli anni ho preso questa scelta molte volte, e finchè non ho avuto abbastanza esperienza per realizzare un mio framework, ho sempre scelto di utilizzarne altri, ma senza mai legare eccessivamente il progetto al framework utilizzato, infatti ho potuto mettere in campo migrazioni su altri framework quando ce ne è stata la necessità. Ora molti dei progetti sviluppati negli anni su Zend Framework sono stati migrati su questo e ho potuto verificare sia la stabilità della soluzione, che i brevi tempi di migrazione.