giovedì 9 settembre 2010 Registrazione Accedi
Search:   Go
 
 

Object-relational mapping

Uno dei principali problemi che ci si trova ad affrontare nella programmazione ad oggetti è rappresentato dall'enorme differenza esistente tra il dominio ad oggetti ed il dominio più rigido entità-relazioni costituito dai database relazionali.

Il problema è risolubile tramite l'utilizzo di uno o più strati software che si occupano della comunicazione tra i due domini applicativi e mettono in relazione concetti ad oggetti quali clienti e ordini, con tabelle quali clienti, ordini testata, ordini righe, spedizioni, pagamenti ecc.

Questi strati software rientrano nella categoria degli ORM (Object-relational mapping).

In base alla tipologia del progetto è possibile scegliere tra le seguenti implementazioni di un ORM:

  • NHibernate
  • LINQ to SQL
  • Entity Framework
  • netTiers

NHibernate

NHibernate è il porting del diffusissimo ORM per Java Hibernate e si occupa della persistenza di oggetti .Net da e verso un database relazionale. NHibernate

Le classi sono completamente disaccoppiate dal database consentendo completa liberta nella creazione del Domain Model. Gli oggetti non devono implementare nessuna interfaccia o ereditare da particolari classi risultando quindi POCO (Plain Old CLR Object).

Si tratta di un progetto open source distribuito con licenza LGPL. Tutte le informazioni si trovano sul sito del progetto.

LINQ to SQL

LINQ to SQL è un'implementazione ORM di Microsoft che consente di mappare le tabelle di un database relazionale sulle classi .Net e di consentire l'esecuzione di query CRUD utilizzando la sintassi LINQ.

Il primo vantaggio di LINQ to SQL è la sua completa integrazione con Visual Studio e la gestione delle classi generate tramite un designer dedicato.

Inoltre l'utilizzo della sintassi LINQ consente il controllo a compile time delle query.

Entity Framework

Entity Framework è un ORM fornito da Microsoft assieme al .Net Framework 3.5 Service pack 1.

Direttamente da Visual Studio è possibile generare il Conceptual Model partendo dallo schema del database e gestire il mapping tra le entità (classi) e le tabelle.

Il nuovo oggetto (Entity Data Model) si occupa quindi di:

  • esecuzione dei metodi CRUD sul database
  • creazione delle classi partendo dalle tabelle, delle collezioni partendo dalla relazione
  • colmare il gap tra ereditarietà del mondo ad oggetti e le tabelle
  • consente la Navigation tra le classi semplicemente utilizzando le Property di ogni classe e trasformando questa navigazione nelle JOIN necessarie
  • consente l'interrogazione tramite eSQL (Entity SQL): le query sono scritte direttamente in Visual Studio non tramite stringhe ma tramite questo dialetto di SQL consentendo quindi di sfruttare l'intellisense e soprattutto di essere verificate in fase di compilazione

.netTiers: generazione automatica di codice

.netTiers OR Mapper
netTiers è un insieme di template che sfruttano Code Smith per la generazione automatica del codice.

Questo generatore di codice crea tutte le classi che costituiscono un completo Data Access Layer (DAL) per mettere in relazione il mondo object oriented con il mondo relazionale dei database.

A partire da un database relazionale normalizzato .netTiers crea in pochi istanti un completo DAL contenente:
- una classe per ogni tabella
- le relazioni tra le tabelle sotto forma di collezioni
- tutti i metodi CRUD (Create, Retrieve, Update, Delete)
- il business layer (a scelta tra Service Model e Domain Model)
- il presentation layer: fornisce controlli asp.net e/o windows forms

Per ulteriori informazioni visita il sito del progetto http://www.nettiers.com/

 
 
Blog Condizioni d'uso  Privacy