2009-02-24 11 views
33

I termini sono spesso gettati in modo intercambiabile, e c'è chiaramente una considerevole sovrapposizione, ma altrettanto spesso sembra implicito che le persone vedano qualcosa di fortemente implicito dicendo che un sistema è un ORM che non è implicito dal fatto che sia un DAL. Cos'è quello? Quali sono, se esistono, i punti chiave che differenziano questi tipi di sistemi?Dov'è la linea tra DAL e ORM?

Ad esempio, supponiamo di avere un codice che implementa le classi Database, Table, Column e Row, popolandole tramite l'analisi automatica di un database esistente, consentendo un'interazione semplificata e così via. Comprende, impone e sfrutta le relazioni strutturali tra le entità del database, come le chiavi esterne. Tutti i modelli di entità possono essere suddivisi in sottoclassi per caricare su di essi funzionalità specifiche della tabella.

In che misura si tratta di un DAL? In che misura è un ORM? Perché?

+0

@chaos - perché il tag gergale ?? DAL e ORM sono acronimi tecnici perfettamente fini –

+0

@DJ: Non intendo usare 'gergo' per implicare che ci sia qualcosa * sbagliato * con i termini. Come suggerito da un altro spettatore alla vendetta bizzarra di Rich B, sto cercando di essere guidato da http://en.wikipedia.org/wiki/Jargon. – chaos

+0

I termini informatici possono essere definiti gergali dagli estranei - ma noi tutti specialisti del software qui - questo non è un gergo per noi - altrimenti quasi tutti i post qui dovrebbero essere etichettati con il gergo –

risposta

49

ORM = Object-Relational Mapping

In un ORM, classi/oggetti nell'applicazione vengono mappati a tabelle del database, nonché operazioni di persistenza, talvolta automagicamente.

DAL = Livello

di accesso ai dati in un DAL, operazioni di database sono nascosti dietro una facciata di codice.

Un ORM è un tipo di DAL, ma non tutti i DAL sono ORM.

+0

Un buon ORM rende il suo DALness quasi invisibile. – yfeldblum

+10

Non sicuro che questo descriva qualcosa a chiunque non sappia già quello che dice. Gli utenti DAL possono sostenere che esegue il mapping delle tabelle e delle operazioni del database a classi e oggetti. L'ORM può essere visto come nascondiglio dietro una facciata. – dkretz

+3

@ [le dorfier]: non è richiesto in un DAL di mappare oggetti e classi nella tabella. DAL.RunSql ("Seleziona * da MyTable", rowCollection) è un DAL, ma non è un ORM (in senso stretto). –

7

Penso che un ORM sia in grado di mappare qualsiasi insieme di oggetti in un database relazionale; mentre un DAL è specifico per la tua applicazione e probabilmente non potrebbe naturalmente essere esteso per supportare altri oggetti.

Non solo, ma un ORM specificamente si occupa di mappatura classi da/per l'entità del database, mentre un DAL può essere semplicemente un modo per accedere ai dati in un database, senza alcuna mappatura.

3

L'ORM non esisteva quando ho iniziato la programmazione. Quando sono usciti i primi ORM, erano strumenti esterni utilizzati per creare il DAL. Ora giorni, DAL e ORM si sono mescolati. Ecco perché molti sviluppatori usano i termini in modo intercambiabile.

L'esempio più noto di un ORM che funziona come un DAL è NHibernate. Altri esempi sono Subsonic e CSLA.NET. Questi sono tutti gli strumenti .NET. IIRC, strumenti ORM iniziati nel mondo Java. Altre tecnologie impilano e poi copiano ciò che Java ha fatto.

5

Qualsiasi DAL orientato agli oggetti che si collega a qualsiasi sistema di memorizzazione che non salva oggetti implementa un ORM. Per ORM si intende generalmente qualcosa come Hibernate, ma la cosa importante è la gestione dei disadattamenti di impedenza.

[Expanded]

A livello di dati, si verificano un disadattamenti di impedenza quando si mappatura dei dati di un tipo (relazionali) in dati di un altro (OO).

Ad esempio, quante volte hai visto una linea come quella in basso nel tuo DAL?

db.AddInParameter(dbCommand, "Name", DbType.String, name); 

parte o dall'altra

customerId = Convert.ToInt64(dr["CustomerID"].ToString()); 

Molti problemi arrivano quando mappare i tipi di dati primitivi.

A livello di oggetto, il DAL dovrebbe restituire le strutture che si intende utilizzare. Che si tratti di una specie di oggetto aziendale o solo di una serie di dati grezzi. Sia il tuo DAL che l'ORM devono gestirlo.

A livello di progettazione, gli oggetti che si costruiscono riflettono i dati memorizzati. Quindi può verificarsi una differenza strutturale. Anche questi sono gestiti per te all'interno delle soluzioni ORM, ma dovresti essere costretto a fare lo stesso all'interno di un DAL. Ad esempio, all'interno del codice OO sarebbe bello implementare l'ereditarietà adeguata, ma ciò non è facilmente comprensibile in qualcosa di relazionale.

Volevo solo sottolineare che ORM è un termine coniato per spingere prodotti che automatizzano molto di ciò che avreste già dovuto fare all'interno del vostro DAL. Le soluzioni ORM semplificheranno la vita e forniranno un gran numero di vantaggi in termini di qualità/prestazioni. Ma ciò non cambia il fatto che uno dei componenti principali del tuo DAL sta creando il tuo ORM.

+0

Potresti ampliare la gestione dei disadattamenti di impedenza? – chaos