ReadBeanPHP: ORM per tutti!

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.

RedBeanPHP Logo

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.

Linux Day. Innovazione. Di tutti. Per tutti.

Anche quest’anno si terrà in tutta Italia il Linux Day. Giunto ormai alla sua tredicesima edizione l’evento vedrà la partecipazione di 104 LUG in tutto lo stivale che insieme hanno coordinato le forze per creare un grande evento a carattere nazionale in cui si parlerà di GNU/Linux, Open Source e Software Libero.
Da sempre spettatore di questo bellissimo evento, quest’anno ho deciso di varcare la soglia e di ritrovarmi dall’altra parte. Forte della convinzione che l’innovazione, motto principale di questo Linux Day, giunga anche dagli strumenti di tutti i giorni, ho deciso di tenere un talk sui social network dal titolo:
Social Network Decentralizzati e Open Source
Gli ultimi eventi riguardanti Assange, Manning e Snowden ci hanno insegnato che i nostri dati sul web non sono al sicuro. Un utente medio bassa la maggior parte del suo tempo sui social network. È possibile far convivere privacy e social network?
Chiunque voglia venirmi a trovare mi troverà al Linux Day di Lecce organizzato dal sempre attivo SaLUG. Sarà una buona occasione per discutere di un argomento ormai al centro della cronaca visti gli ultimi avvenimenti incentrati su spionaggio internazionale e violazione della privacy.
Locandina Linux Day 2013 – Lecce

GetSimple CMS – Last Hashtag Tweet Plugin

Essendo alla ricerca di un semplicissimo CMS da interporre tra gli utenti e i servizi web che sviluppo, ho avuto modo di vagliare diverse opportunità. Alcuni CMS erano davvero interessanti ma avevano il problema di essere (volutamente?) troppo complessi. Ero alla ricerca di quella minimalità che ormai è tanto rara da trovare. Il mio viaggio, così, mi ha portato due giorni fa alla scoperta di GetSimple.
GetSimple è un CMS molto basilare che fonda la sua forza, oltre che sulla semplicità, sul fatto di non sfruttare alcun database. Dite addio a configurazioni complesse e lunghe perché GetSimple usa, e lo fa molto bene, dei semplicissimi file XML.
Caduto ormai in amore con questo prodotto ho voluto testarne le potenzialità e devo dire che il progetto promette bene. Interfaccia semplice, pulita e minimale. Altamente configurabile e potenzialmente molto valido. La comunità alle spalle del progetto è viva e il codice cresce di giorno in giorno. Ovviamente la fetta di mercato che il software può coprire è quella dei piccoli e medi siti e pertanto non è possibile effettuare un paragone con alternative che aggrediscono i settori dei grandi portali come ad esempio WordPress.
Volendo entrare a far parte di questo mondo, e volendo testare quel poco di framework che c’è alle spalle del programma, ho sviluppato un modulo molto semplice: Last Hashtag.
Last Hashtag permette, mediante una minima configurazione, di mostrare, nella sidebar del proprio sito web gli ultimi tweet provenienti dal mondo twitter mediante la scelta di un determinato hashtag, le famose parole chiave precedute dal cancelletto. In questo modo sarà possibile far vedere ai visitatori sempre cosa si dice sul noto social network in base ad una argomento di nostro interesse. Vi lascio il link alla pagina dei moduli ufficiali di GetSimple, il thread del forum e due screeshots per vedere il plugin all’opera.
Configurazione Plugin
Sidebar con plugin attivo e configurato