2010-03-06 4 views
15

Sto iniziando a fare i conti con CodeIgniter e ho trovato il supporto per il modello Active Record.È una buona idea usare la libreria di record Active CodeIgniters per manipolare i database MySQL o dovrei semplicemente usare SQL?

Mi piace il fatto che si genera il codice SQL per voi in modo sostanzialmente è possibile recuperare, aggiornare e inserire i dati in un database senza occupare l'applicazione per un motore di database specifico.

Semplifica le query semplici, ma la mia preoccupazione è che rende le query complesse più complesse se non impossibili (ad esempio, se è necessaria una funzione specifica del motore).

Le mie domande

Qual è la sua opinione su questo modello in particolare per quanto riguarda l'attuazione CodeIgniters?

Ci sono problemi di velocità con il wrapping del database in un altro livello?

Fa (logico) diventare caotico quando si tenta di creare query molto complesse?

I vantaggi fuori dagli svantaggi?

risposta

35

Ok, prima di tutto il 99% delle tue domande sarà semplice selezionare/inserire/aggiornare/eliminare. Per questo disco attivo è fantastico. Fornisce una sintassi semplice che può essere facilmente modificata. Per domande più complesse dovresti semplicemente usare il metodo di query. Ecco a cosa serve

In secondo luogo, fornisce la sicurezza di escape & per tali query. Affrontalo, probabilmente la tua applicazione avrà centinaia se non migliaia di luoghi in cui le query avranno luogo. Sei obbligato a rovinare e dimenticare di scappare correttamente da alcuni di loro. Il record attivo non dimentica.

In terzo luogo, le prestazioni nella mia esperienza non sono drammaticamente colpite. Certo che lo è, ma è probabilmente intorno a 0,0000 per query. Penso che sia perfettamente accettabile per gli ulteriori controlli di sicurezza e sanità che fa per te.

Infine, penso sia chiaro che ritengo che i vantaggi siano di gran lunga superiori agli svantaggi. Avere domande sicure che anche il tuo sviluppatore più giovane può capire e non rovinare è una grande cosa.

+2

+1 I vantaggi di AR superano di gran lunga i negativi ... –

+0

Mi stavo chiedendo anche questo. Risposta fantastica, grazie ragazzo! – mdgrech

2

Qual'è la tua opinione (sic) di questo modello in particolare per quanto riguarda l'attuazione CodeIgniters?

Non posso dire molto sull'implementazione di CI. In genere evito AR per tutto tranne le applicazioni più semplici. Se la tabella non corrisponde a 1: 1 per i miei oggetti aziendali, non utilizzo AR, poiché rende difficile la modellazione dell'applicazione. Inoltre non mi piace l'idea di abbinare il livello di persistenza ai miei oggetti di business. È una violazione della separazione delle preoccupazioni. Perché un prodotto dovrebbe sapere come si salva? lettura Futher: http://kore-nordmann.de/blog/why_active_record_sucks.html

EDITdopo il commento di @kemp, ho guardato la Guida CI utente per vedere come sono implementati AR:

Come si può vedere in PoEAA un AR è un oggetto che avvolge una riga in una tabella di database o in una vista, incapsula l'accesso al database e aggiunge la logica di dominio su quei dati. Questo non è quello che CI fa però. Fornisce solo un'API per creare query. Ho capito che esiste una classe Model che estende AR e che può essere utilizzata per creare oggetti di business, ma che sarebbe più simile a Row Data Gateway quindi. Controlla PHPActiveRecord per un'implementazione alternativa.

Ci sono problemi di velocità con il wrapping del database in un altro livello?

Ogni volta che si astraggono o si avvolgono qualcosa in qualcos'altro, si può essere certi che questo ha un impatto sulle prestazioni rispetto a farlo crudo. La domanda è, è accettabile per la tua applicazione. L'unico modo per scoprirlo è il benchmarking. Letture consigliate: https://stackoverflow.com/search?q=orm+slow

EDIT In caso di semplice API costruzione di query di CI, mi piacerebbe assumere l'impatto sulle prestazioni di essere trascurabile.L'assemblaggio delle query richiederà logicamente un po 'di tempo in più rispetto all'utilizzo di una stringa SQL raw per l'adattatore db, ma solo microsecondi. E tu per quanto ho visto nella Guida dell'utente, puoi anche memorizzare le stringhe di query. Ma in caso di dubbio, punto di riferimento.

Fa (logico) diventare caotico quando si tenta di creare query molto complesse?

dipende dalla vostra query. Ho visto query SQL piuttosto complicate. Quelli non diventano più belli se espressi attraverso un'interfaccia OO. A seconda dell'API, potresti trovare query che non sarai in grado di esprimere attraverso di essa. Ma poi di nuovo, questo dipende dalle tue domande.

I vantaggi fuori dagli svantaggi?

Questo solo tu puoi decidere. Se rende facile la tua vita di programmatore, perché no? Se soddisfa le tue esigenze di programmazione, sì. Ruby on Rails è costruito pesantemente su questo (AR) concetto, quindi non può essere poi così male (anche se potremmo discutere anche su questo :))

+0

La classe Active Record di CodeIgniter non è un ORM, è solo un modo conveniente per scrivere query (semplici). –

+0

@kemp Quindi la classe AR di CI non è un AR. Ma come ho detto all'inizio: non posso dire molto sulla realizzazione della CI. – Gordon

Problemi correlati