La prototipazione nel campo dello sviluppo software è un importante processo del workflow poiché è uno dei primi step che permette la conversione delle idee in codice. Questa importante fase, molto spesso, si avvale dell’uso di librerie preconfezionate da altri sviluppatori che servono proprio all’agevolazione del lavoro del programmatore così da aiutarlo a dar forma alle proprie idee per poi dedicarsi a successivi miglioramenti sia nella struttura che nelle performance.
Quando si parla di software che sfruttano un database, uno strumento davvero utile per la gestione dei dati e delle relazione sono sicuramente le librerie per l’ORM management.
L’ORM (Object-relational mapping) è una tecnica di programmazione che permette di gestire le relazioni e i dati del database sfruttando la praticità della programmazione ad oggetti. In pratica le tabelle vengono rimappate come classi ed i dati al suo interno sono parte della classe stessa. In questo modo la classe metterà a disposizione diverse funzioni per interagire con i dati ed i normali processi CRUD possono essere gestiti in maniera rapida e indolore senza ricorrere alle query pure.
Essendo alla ricerca di un ORM per PHP mi sono imbattuto in quello che, secondo i miei gusti personali, è la libreria di prototipazione più semplice che esista: RedBeanPHP.
Come lo stesso sito dice, RedBeanPHP è una leggerissima libreria ORM che non necessita di alcun file di configurazione. Essa infatti, una volta aperta la connessione con il database, si occuperà di gestire le tabelle e i dati nella maniera opportuna e creerà per noi tabelle, campi e relazioni dove necessario. Questo ultimo passo è una delle caratteristiche che rende RedBeanPHP un passo avanti rispetto ai concorrenti. La libreria, infatti, creerà per noi tutto il necessario e questo risulta utilissimo nelle prime fase di prototipazione di un’applicazione che fa largo uso di database. Tutto quello che bisogna fare è rispettare le convenzioni nella scrittura del codice ed il nostro fidato amico si occuperà di tutto il resto.
Esempio di codice
Qui di seguito vedremo un piccolo esempio di codice riportato sul sito ufficiale per capire come funziona, in maniera basilare, RedBeanPHP.
require 'rb.php'; R::setup(); $post = R::dispense('post'); $post->text = 'Hello World'; $id = R::store($post); //Create or Update $post = R::load('post',$id); //Retrieve R::trash($post); //Delete
Innanzitutto partiamo con il precisare che RedBean ragiona in Bean ovvero oggetti con proprietà pubbliche. Ogni record che la libreria genera e gestisce è una classe a sé stante che può essere manipolata, creata e distrutta in maniera abbastanza pratica. Il concetto stesso di record viene esteso e pertanto ci si sposta ad un livello di sviluppo diverso rispetto a quello a cui è abituati quando si parla di gestione dei database nel proprio codice.
Con la prima riga di codice abbiamo semplicemente detto al nostro script di includere la libreria e di permetterci di usarla. RedBeanPHP viene distribuito anche come libreria all-in-one già preconfezionata con i diversi plugin sviluppati ad hoc.
Successivamente ci preoccupiamo di aprire una connessione verso il nostro database. In questo caso la funzione setup() è priva di parametri. Questo genererà un database di tipo sqlite contenuto in maniera provvisoria sul sistema in uso. Mediante il passaggio dei parametri è possibile sfruttare altri engine come Postgresql o Mysql.
Alla riga 3 troviamo una delle prime funzioni utili: dispense(). Essa si preoccupa di istanziare un oggetto di tipo Bean totalmente nuovo. Se a tale funzione viene passato solo il primo parametro essa gestirà un solo Bean come un nuovo record della tabella definita dal parametro stesso (nel nostro caso ‘post’). Se invece ad essa viene passato anche il secondo parametro sotto forma di intero, verranno generati n Beans dove n è dato da questo ultimo valore.
La gestione degli id con RedBeanPHP è totalmente automatica ed essi sono gestiti come interi progressivi di nome ‘id’. Attenzione però: aver istanziato un Bean con dispense() non significa aver creato un record nella tabella corrispondente ma vuol dire gettare le basi per far ciò in un secondo momento.
Andando avanti troviamo la prima definizione di un campo. Al nostro oggetto, infatti, viene associata una nuova variabile pubblica e ad essa viene assegnato un valore (in questo caso stringa). Senza la minima costruzione di valori e senza nessuna definizione particolare abbiamo appena detto a RedBean che nella tabella ‘post’ ci dovrà essere un campo di nome ‘text’ di tipo ‘varchar’. Con una sola riga di codice. Ovviamente allo stesso modo possono essere definiti valori diversi di tipo diverso.
Grazie alla funzione store() possiamo realmente salvare quanto abbiamo appena definito ed ottenere dalla stessa funzione l’id automaticamente associato al nuovo record nella tabella.
Per meglio comprendere l’uso dell’id, nella riga 8 è stata sfruttata la funzione load() che permette di caricare un record definendo da quale tabella deve essere prelevato e a quale id deve corrispondere.
Infine trash() si occupa di eliminare il record prelevato.
Come si evince da questo esempio le potenzialità della libreria sono molte e risulta essere molto potente se usata a dovere. Con sole poche righe di codice si è potuta creare un’intera tabella e definirne i campi in essa contenuta. Grazie a questo piccolo specchietto di codice è stato possibile analizzare come RedBeanPHP gestisce il CRUD.
Per qualsiasi approfondimento vi rimando al sito ufficiale o ai commenti qui sotto.