lunedì 11 settembre 2006

Object / Relational Mapping

Quanto è comodo!

Per chiunque non sappia cosa sia l'Object / Relational Mapping (o ORM) è un metodo di Mappatura per le tabelle di un database.

Facciamo un'esempio:

possiedo una tabella persona(nome, cognome, Indirizzo, Telefono, EMail)

se volessi usare Sql per leggere il db il minimo che dovrei fare è aprire una connessione con il server, lanciare una query (del tipo "SELECT indirizzo WHERE EMail = pippo@pluto.it"),  e leggermi il  resultSet.

Questo potrebbe sembrare un approccio classico e sicuro... ma sicuramente non è agile.

Prima di tutto potrei rischiare di scrivere codice misto (sql + java, sql + php, e via dicendo) rendendo difficile da leggere il listato. Oltretutto modificando minimamente la tabella si rischierebbe di far saltare il programma.

Con un approccio ORM invece le cose si semplificano molto, e programmare su database diventa meno noioso, anzi diventa divertente.

In cosa consiste ORM? A noi informatici piace molto astrarre concetti per semplificare le cose e rendere il tutto più simile a un modello comune. Lo abbiamo capito con la programmazione ad oggetti, dove una classe "persona" può essere istanziata in più modi, una con "nome" uguale a "piero", un'altra con nome "joe", un'altra con nome "paola" e via dicendo, ma avrà sempre l'aspetto e la struttura di una persona.

Ora il concetto della programmazione a oggetti per noi addetti ai lavori è molto semplice e ci ha velocizzato molto la vita, allora perchè non estendere lo stesso ragionamento ai database?

Torniamo alla mia tabella persona. Con ORM ogni riga della tabella sarà istanziata come un oggetto di tipo "persona", i campi della tabella corrisponderanno a dei metodi get/set. Per esempio potrò leggere o modificare il campo "nome" con istanzaPersona.getName() o istanzaPersona.setName().

Semplice no?

Anche le relazioni tra le tabelle possono essere facilmente rappresentate via ORM, per esempio una tabella master con una relazione uno a molti possiederà un campo di dettagli contenente (in Java) una collection di istanze dell'oggetto ORM relativo alla tabella relazionata.

Le classi ORM  in Java possono essere scritte a mano o con tool presenti nei maggiori IDE come Netbeans o Eclipse.

ORM in Java può essere utilizzato con EJB 3 e TopLink, in Ruby on Rails è già presente il livello ORM "Active Record".

Spero che vi sia stato utile... e chiaro...

Ciao Piero

5 commenti:

  1. chiaro! e pulito ! :) il lettore più attivo del tuo blog! è contento di questo tuo nuovo post! .. spero che siano sempre più frequenti!. Mi piacerebbe anche vedere attiva la sezione stelle e pianeti. Oltre a quel riferimento a programmi esistenti! magari anche qualche curiosità sui corpi celesti dato che è una delle tue passioni! E diciamo si siamo informatici e siamo destinati a ragionare a 1 e 0 :) per il resto della nostra vita. Sofferimiamoci a contemplare le stelle ogni tanto .. o nO ?

    RispondiElimina
  2. Anche le stelle ragionano con gli zeri e gli uno... esistono le stelle binarie... :-) (lo so era pessima....)
    Ad ogni modo vorrei renderti felice, bloggando di più, ma i problemi principali sono due:
    1) (a volte) mancanza di argomenti
    2) (spesso) manzanza di tempo

    e spesso i due problemi si presentano dislocati nel tempo...

    RispondiElimina
  3. eh lo so ! ma attendo con fiducia! Sn convinto che anche se il tempo scarseggia si trovano quei 10 minuti per ste cose!.. Cmq è una proposta mi farebbe piacere dato che tu tene intendi lavoro permettendo è naturale.

    RispondiElimina
  4. L'ORM è una bella cosa, anche se la feature da preferisco non mi sembra da te citata: la portabilità intra-RDBMS. Sviluppo su mysql, deploy su postgresql (in real-life bisogna cmq fare 1 po' di attenzione per eventuali bug nel sottosistema ORM)!

    Come tutte le cose xò preferisco pensare ogni volta se è il caso aggiungere un tier all'applicazione oppure no.. :)

    A presto Piero!

    -- M

    RispondiElimina
  5. Grande pecca! In effetti l'intra-RDBMS è una delle cose più comode e utili dell'ORM! Dovem lavoro utilizziamo EJB e TopLink, e la cosa più bella è che il db gira su MySql, Oracle e MS-Sql, modificando solo le stinghe di connessione nell'xml di configurazione

    RispondiElimina