di: Gian Maria Ricci 26 Novembre 2008
Un ORM implementa solitamente il pattern Repository, il cui scopo è schermare l'utilizzatore dal reale supporto fisico delle istanze. Un repository viene percepito dall'esterno come il gestore della memorizzazione degli oggetti e non è assolutamente necessario preoccuparsi di come questa memorizzazione venga realmente ottenuta.
Le operazioni base di un repository dal punto di vista logico sono le solite CRUD e tra queste l'operazione di Read è indubbiamente la più impegnativa, perché si ha la necessità di fornire all'utilizzatore una sintassi con cui specificare condizioni complesse sugli oggetti da recuperare. Raramente infatti si ha la necessità di caricare tutti gli oggetti di un certo tipo, oppure una singola istanza data la sua chiave, più spesso si deve recuperare un sottoinsieme di oggetti che soddisfi una qualche condizione.
Mentre nel linguaggio SQL la sintassi per le query prevede solo un formato testuale, un repository permette di specificare condizioni direttamente sulle proprietà degli oggetti, solitamente tramite interfacce differenti. Nel caso di NHibernate ad esempio possiamo utilizzare:
e in cantiere vi è il supporto a LINQ per il framework 3.5.
Tra tutte, HQL è la tecnica più immediata, perché si avvicina molto al linguaggio SQL, presentando dunque una minore difficoltà di apprendimento. Il vantaggio di usare HQL sta nel fatto che la query viene espressa sul Domain Model e non sul modello fisico di memorizzazione.
Figura 1. Propagazione dell'interrogazione
Grazie a HQL si possono esprimere query come: «Seleziona tutti i clienti che hanno la proprietà Nome pari a 'Gian Maria'», in questo modo si crea un livello di astrazione tra la logica applicativa (costituita da oggetti) ed il supporto di memorizzazione (db transazionale). Questa separazione è resa possibile dall'ORM, che si occupa di tradurre le richieste in un formato compatibile con il supporto di memorizzazione dei dati, trasformando poi i risultati dell'interrogazione in oggetti.
La query precedente viene espressa in HQL in questo modo:
Select c from Customer c where c.Name = :param
Come anticipato, le condizioni vengono direttamente imposte sull'oggetto Customer richiedendo che la sua proprietà nome sia pari al valore :param. All'entità Customer viene assegnato l'alias c, che deve essere poi usato in tutto il resto della query. Il parametro è costituito invece da un identificatore preceduto dai due punti in stile Oracle.
Guida Windows Azure Code SnippetsLe migliori pratiche per far girare le applicazioni "in the cloud",... |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |