2009-05-12 11 views
5

Se utilizzo le stored procedure, posso utilizzare un ORM?Dovrei usare un ORM se sto usando le stored procedure?

EDIT:

Se posso usare un ORM, non fa che una parte sconfitta della ragione agnosticity banca dati per l'utilizzo di un ORM? In altre parole, perché altrimenti dovrei voler usare un ORM, se mi sto legando ad un particolare database con stored procedure (o è errata questa supposizione)?

risposta

7

L'utilizzo di ORM per accedere alle stored procedure è uno dei migliori usi di ORM. Ti darà oggetti fortemente tipizzati, mentre hai ancora il pieno controllo su SQL.

+0

+1 per "oggetti fortemente tipizzati" – Jagd

+0

Che va bene SE la tua lingua è fortemente tipizzata. Quando usi qualcosa come PHP, hai bisogno del codice che controlla i parametri. Questo non significa che non puoi avere un ORM o un generatore di codice che non lo farà per te. Caso di esempio: ho sviluppato un generatore di codice che scrive wrapper di accesso per le funzioni di Postgresql e li espone come servizio Web SOAP. Poiché non volevo scrivere codice extra per verificare i parametri scalari, ho aggiunto una funzione che lo fa perché PHP non supporta l'hint di tipo scalare (https://github.com/sylnsr/pgfunc2php/blob/master/pgsupport.lib .php) –

2

Sì, è possibile, tutti gli ORM principali supportano le stored procedure.

Per quanto riguarda la vostra ipotesi, avete particolarmente ragione, quando utilizzate le stored procedure con ORM state accoppiando il vostro progetto ad un particolare database. Ma in pratica è del 99% che non avrai bisogno di cambiare il tuo provider di database, quindi in questo caso usi ORM per non astrarre dal fornitore di DB concreto, ma per aiutare te stesso con l'attività di mappatura relazionale dell'oggetto - che è il compito di un ORM principale e su quale ORM è stato originariamente creato.

0

È possibile, ma molte delle funzioni di ORM più avanzate tendono a diventare più ingombranti da utilizzare. Qualcosa come iBatis è molto facile da integrare con le stored procedure, mentre le funzionalità più sofisticate di motori più complessi come (N?) Hibernate come la generazione di SQL dinamico e il caricamento lento di grandi campi possono diventare più fastidi di quanto valgano.

2

Solleva un punto interessante.

Una volta che si dispone di ORM e query relativamente semplici, perché sono necessarie stored procedure? Gli SP sono intimamente legati al database. ORM ti libera dal dover mantenere un sacco di codice specifico per DB. Cosa è DB specifici possono essere isolati e gestiti.

Suggerisco che un ORM è un'occasione d'oro per ridurre la complessità e mettere tutta l'elaborazione nel codice a cui appartiene.

Utilizzare il database per ciò che è meglio - memorizzare i dati.

Utilizzare l'applicazione per ciò che sa fare meglio - elaborare i dati.

+0

Non è comunque un grande dibattito? SP contro nessun SP. – johnny

+0

old way vs. new way – IAdapter

+1

Alcune persone amano discuterne.Altri di noi sono stanchi di cercare di mantenere una procedura memorizzata e di innescare grovigli di spazzatura. L'idea che l'ORM libera dalla complessità degli SP è molto allettante per alcuni di noi. –

3

Nella mia esperienza avrei lasciato che l'ORM gestisse le operazioni di "CRUD" e lasciasse il lavoro di specialità alle stored procedure. In genere, l'utilizzo di una stored procedure per le operazioni "CRUD" è eccessivo e consentire all'ORM di gestirlo, potrebbe migliorare drasticamente la produttività.

1

Sì, ma è possibile dedicare un po 'di tempo a esaminare quali funzionalità l'ORM fornisce in merito alle stored procedure.

La maggior parte consentirà di eseguire una procedura memorizzata che restituisce un oggetto/entità fortemente tipizzato. Gli ORM più avanzati permetteranno di collegare anche le stored procedure per l'esecuzione di azioni CRUD (quindi l'interrogazione generica, la cancellazione ecc. Passa attraverso una stored procedure piuttosto che una query dinamica).

generale ORM sono grandi per la generazione di query ad hoc e ottenere entità fortemente tipizzati, ma con un forte sostegno stored procedure ha il vantaggio di che consente di (a volte) di accedere più facilmente capacità nativa del RDMS che non può essere esposto come prima i cittadini di classe nell'ORM, specialmente se l'ORM supporta molti motori di database.

seguito dal vostro edit:

Spesso si vuole utilizzare l'ad-hoc del motore interrogazione fornito dal ORM tuttavia come ho accennato in precedenza - a volte si desidera eseguire una query utilizzando una capacità non esposto dal ORM .

I vantaggi delle entità fortemente tipizzate sono inestimabili in quanto significa che si dispone di un oggetto dominio di solito, piuttosto che di lettori di dati, tabelle di dati, ecc. È possibile racchiudere in modo pulito i comportamenti e la logica all'interno di quelle entità che sono stati recuperati.

L'elenco di ulteriori vantaggi è davvero molto lungo: ad esempio, con l'ORM LightSpeed ​​(e molti altri) le entità supportano interfacce di binding standard, interfacce di segnalazione degli errori, convalida ecc. caricamento pigro ecc. a meno che non lo scriviate da soli.

1

Database "agnosticity" (?) Non è l'unico motivo per utilizzare un ORM. Tuttavia, si potrebbe trarre vantaggio dall'essere indipendenti dal DB sul 99% delle interazioni con il DB e nell'1% (o 2% o 10% o qualsiasi altra cosa) potrebbero essere necessarie stored procedure per velocità/chiarezza/complessità. Se hai modificato i DB, dovresti riscriverli.

1

Io uso netTiers molto al lavoro e ci permettiamo di generare le nostre stored procedure per noi. Questi gestiscono solo le operazioni CRUD di base, ma sono molto veloci e mi fanno risparmiare un sacco di tempo. netTiers ci consentirà inoltre di creare procedure memorizzate personalizzate e generare il nostro codice di accesso ai dati con queste procedure.

2

È possibile utilizzare contemporaneamente le funzionalità ORM e le stored procedure. In particolare, utilizza ORM fino a quando non ti soddisfa, ma se hai qualche problema con le prestazioni o hai bisogno di un po 'di musica di basso livello, includi le stored procedure nella tua logica aziendale.

0

Credo che qualsiasi strumento che ti libera dalla ripetizione del lavoro e dalla concentrazione nella risoluzione dei problemi è valido. Gli ORM sembrano essere quello strumento quando si tratta di operazioni CRUD di base - anche se si usano gli SP per implementare meglio un requisito (come usare un martello su un chiodo, è solo lo strumento giusto per l'attività).

Il punto è: non c'è nero o bianco, solo una scala di grigio. Le applicazioni molto inefficienti e mal codificate usano la scusa di essere "DB agnostici" per spiegare l'uso esagerato delle risorse DB. In molti casi, essere molto legati a un database non è buono. L'obiettivo è ottenere il massimo "agnosticismo del DB" senza sprecare le risorse IT dei clienti senza necessità.

Non c'è "vecchio contro nuovo", solo persone che dicono che gli approcci "puri" estremi sono migliori. Non ci credo davvero. Credo che, come con qualsiasi strumento, l'approccio "migliore" (notare le virgolette) stia usando ORM fino a quando non è ancora lo strumento giusto per accedere ai dati. E usa gli SP all'interno del tuo ORM quando raggiungi un punto in cui stai sprecando risorse e riducendo la scalabilità e "vale la pena vivere" (ho dimenticato l'espressione inglese equivalente al portoghese "vida útil") delle risorse TI. O, in altre parole, usa SP quando è per l'elaborazione a portata di mano che cos'è un martello per l'unghia.

Problemi correlati