PHPBlog.it

Un semplice ORM in PHP: iniziamo?

Con l’articolo di oggi intendo illustrare il modo in cui andremo a realizzare l’intero componente. Innanzitutto non posso non menzionare Active Record: si tratta del “metodo” (o concetto, o meglio ancora pattern) con cui sono realizzati buona parte degli ORM esistenti, tra cui quello famoso di Ruby On Rails, Propel e molti altri. Wikipedia ve ne saprà sicuramente dire di più.

Io ho optato per un approccio un pò più originale, seppur con evidenti collegamenti ad Active Record. Forse con il mio metodo c’è un eccessivo utilizzo della programmazione ad oggetti e di classi, in quanto ciò che ho fatto sarebbe potuto venir realizzato con programmazione procedurale.
Credo sia questione di abitudine, in quanto personalmente ritengo la OOP un’ottima cosa, e col tempo ho imparato a vedere oggetti e classi un pò dappertutto, finendo per abituarmi. Colgo l’occasione per suggerire ai lettori l’occasione per chi non l’avesse fatto di aprirsi a questo modo di programmare, facilitato con il buon supporto di PHP5.

Ogni tabella del database sarà cosi un oggetto, che popolerà un array interno rappresentante una “immagine” della tabella, risultante dalla query. Ogni tupla sarà essa stessa un oggetto, formata da i suoi metodi e che racchiude a sua volta un nuovo vettore di oggetti, i campi della tupla.

Spiego la decisione di rendere tutto un oggetto.

Rendendo ogni tipo un oggetto si ha la possibilità di definire tipi specifici (come il tipo email, non presente nativamente nei database) e personalizzati. Ad esempio se si ha la necessità di specificare un tipo particolare che debba rispondere ad un dato pattern, basta creare una semplice classe nella cartella predefinita che eredita dalla classe base ed aggiungerla al loader dei tipi di dato. Poi sarà necessario solo definire la validazione secondo i criteri voluti. Vi assicuro che nella pratica è molto più semplice che a descriverlo.

Definendo ogni singola tupla come oggetto si ha la possibilità di separare la gestione della tabella come insieme dalla gestione della singola riga. E questo è un vantaggio più che sufficiente..

Ed infine, in una buon esempio di programmazione ad oggetti cosi, una tabella semplicemente non può non venir associata ad una classe.

A fare da collante tra le varie componenti dell’applicazione ci penserà un file chiamato orm.php, dove il core del componente gestisce le richieste e le invia ai vari sotto componenti.

Per quanto riguarda la possibilità di utilizzare altri database oltre a mysql, sto cercando di mantenere il tutto più modulare possibile, per facilitare l’eventuale aggiunta. Una classe chiamata Connector contiene le istruzioni per la connessione, e basta aggiungere il metodo che ritorna la connessione al database desiderato per poterlo utilizzare. La classe ConnectionHandler invece rende questo passaggio trasparente al resto dell’applicazione, e fornisce gli strumenti per connettersi al database in caso di necessità.

Infine il layer di astrazione fornirà all’utente un interfaccia user-friendly con cui interagire, mantenendo comunque il controllo sulle operazioni effettuate dall’ORM.

Lo so che le cose che sto dicendo ora sembrano campate in aria, senza esempi, ma non appena avrò terminato la scrittura del codice (almeno una release pre-alpha, presumo verso la prossima settimana) posterò i primi esempi ed il primo codice.

Domande? Curiosità? Critiche? I commenti qui sotto sono a vostra disposizione!

Pubblicato da il 21 marzo 2008 in phpblog

Commenti

  • Questo articolo è stato segnalato su ZicZac.it….

  • diggita.it scrive:

    Un semplice ORM in PHP: iniziamo?…

    Con l’articolo di oggi intendo illustrare il modo in cui andremo a realizzare l’intero componente. Innanzitutto non posso non menzionare Active Record: si tratta del “metodo” (o concetto, o meglio ancora pattern) con cui sono realizzati buona p…

  • Lascia un Commento

    *