Che tipo di progetti di sviluppo Web beneficiano dell'uso di ORM?

10

Inizierò dicendo che ho eseguito il 95% del mio database con SQL. Recentemente, ho fatto alcune ricerche su vari ORM, come NHibernate e Doctrine.

Riesco a vedere i vantaggi di non aver bisogno di conoscere molto SQL e la portabilità del database fornita da un ORM. Ma posso anche vedere che conoscere SQL renderà più efficace il lavoro con un ORM e posso solo pensare a una volta nella mia carriera che il più grande cambiamento di un'applicazione sarebbe il fornitore di database.

Poiché mi sento molto a mio agio nello scrivere SQL e apparentemente non sto realizzando i benefici spesso insegnati dell'uso di un ORM, la mia domanda agli utenti ORM pesanti è questa:

Che tipo di progetti di sviluppo Web trarranno maggior vantaggio dall'uso di ORM?

    
posta Fred Wilson 18.04.2011 - 22:00
fonte

6 risposte

5

(Quasi) tutte le applicazioni beneficiano di ORM.

Innanzitutto, non sono d'accordo con i vantaggi elencati per ORM .

  • L'uso di ORM non significa necessariamente che non è necessario conoscere SQL. Una conoscenza di SQL aiuterà a capire cosa sta facendo lo strumento ORM, che è particolarmente utile durante il debug. Inoltre, SQL potrebbe effettivamente essere richiesto per sviluppare query complesse che vanno oltre la capacità dell'ORM scelto.
  • E come dici tu, la portabilità è raramente una preoccupazione nella vita reale.

Al contrario, i vantaggi reali di ORM sono:

  • ORM risparmia il tempo del programmatore perché salva la scrittura di tonnellate di logica CRUD in SQL
  • molti ORM includono logica di caching complessa, ecc. che è difficile da scrivere ed eseguire il debug. Oltre a risparmiare tempo, migliora l'affidabilità e la manutenibilità della tua applicazione (o almeno ti risparmia il tempo necessario per ottenere gli stessi risultati)
  • i migliori ORM hanno una comunità di utenti che attivamente sviluppano, mantengono e supportano il prodotto. La community attorno all'SQL personalizzato è, nella migliore delle ipotesi, un po 'meno focalizzata sui problemi che dobbiamo risolvere.

Mentre commentate, un lato negativo di ORM è una perdita di prestazioni. Tuttavia, questo di solito può essere compensato spendendo più hardware.

In genere, il tempo del programmatore è più costoso dell'hardware, quindi ORM è generalmente una buona opzione invece di SQL codificante a mano.

ORM è la soluzione migliore per le applciazioni con una logica di database CRUD abbastanza semplice. ORM è meno efficace per :

  • Applicazioni che richiedono poco o nessun accesso al database.
  • Applicazioni che dipendono in gran parte da query complesse e molto semplice logica CRUD
  • Situazioni in cui le prestazioni sono fondamentali, ma dove non esiste la possibilità di implementare hardware più veloce

Nella mia esperienza, queste situazioni sono rare. Quindi la mia risposta.

    
risposta data 18.04.2011 - 23:09
fonte
4

Mi piace scrivere anche SQL. Sono anche molto più a mio agio nel non dover scrivere alcun codice SQL, oltre a non preoccuparmi di connettere, disconnettere, mettere in comune, ecc. In un database.

Quindi .. risponderò al negativo della tua domanda. Gli unici progetti di sviluppo web che NON beneficiano di un ORM sono quelli che non parlano affatto di un database. Quale credo siano la minoranza (se esiste).

    
risposta data 18.04.2011 - 22:21
fonte
2

In base alla mia esperienza con i WebForm di ASP.NET, proporrei che i progetti web che utilizzano i framework Web stateful traggano il massimo vantaggio dall'utilizzo di un ORM.

Con un framework stateful il markup viene generato automaticamente dietro le quinte, in base alla gerarchia dei controlli server attivi. Si è tentati di caricare quei controlli e mantenere il loro stato automaticamente nel database. Questo è dove aiuta ORM.

In qualche modo estrai la fine della pipeline (output HTML) ed è naturale che ti inviti a gestire l'inizio (origine dati) nello stesso modo in modo che tu rimanga all'interno della tua logica aziendale nel codice dell'applicazione.

Non che non sto dicendo che questo è un buon modo per fare le cose. È proprio dove ORM si adatta naturalmente.

    
risposta data 18.04.2011 - 22:06
fonte
2

Nelle applicazioni in cui è presente un modello di oggetto grande e molto connesso, un ORM consente di risparmiare la scrittura degli stessi join più e più volte.

Un altro vantaggio è il caricamento lento, in cui si desidera che una API restituisca un grafico oggetto in cui il client dell'api utilizzerà solo un sottoinsieme di tale grafico.

    
risposta data 18.04.2011 - 22:23
fonte
1

Credo che stai confondendo un ORM con un DBAL .

Il concetto a cui ti riferisci è un Database Abstraction Layer (DBAL) che ti permette di scrivere "sql" portatile che non dipende dal sistema di database sottostante.

Un ORM sull'altra mano (che è (quasi?) sempre costruito su un DBAL):

Object-relational mapping (ORM, O/RM, and O/R mapping) in computer software is a programming technique for converting data between incompatible type systems in object-oriented programming languages. This creates, in effect, a "virtual object database" that can be used from within the programming language. (Wikipedia)

In poche parole, un ORM consente di convertire i dati da un database flat in una rappresentazione di oggetti gonfiati.

    
risposta data 18.04.2011 - 22:41
fonte
1

I progetti che non beneficerebbero di ORM sarebbero:

  • quelli che non sono orientati agli oggetti;
  • quelli, che non hanno bisogno di conservare i dati;
  • quelli, che usano DB orientato agli oggetti, quindi non hanno bisogno di ulteriore strato di mappatura;
  • quelli che usano soluzioni NoSQL relazionali;
risposta data 19.04.2011 - 00:25
fonte

Leggi altre domande sui tag