Domanda

Sto sviluppando applicazioni Web da un po 'di tempo e mi sento abbastanza a mio agio con mySql, in realtà come molti uso una qualche forma di SQL quasi ogni giorno. Mi piace la sintassi e ho zero problemi a scrivere query o ottimizzare le mie tabelle. Mi è piaciuto questo mysql api .

La cosa che mi ha infastidito è Ruby on Rails utilizza ActiveRecord e migra tutto in modo da utilizzare le funzioni per interrogare il database. Suppongo che l'idea di essere te "non debba mai più guardare SQL". Forse questo non è KISS (mantienilo stupido) ma l'interfaccia di ActiveRecord è davvero la migliore? Se sì, perché?

Lo sviluppo senza dover mai scrivere un'istruzione SQL è salutare? E se mai dovessi cercare qualcosa che non è già definito come una funzione di rotaie? So che hanno una funzione che mi permette di fare una query personalizzata. Immagino davvero che voglio sapere quali sono i vantaggi della gente nell'usare ActiveRecord su mySQL e se qualcuno si sente come me, forse questo sarebbe per la comunità delle rotaie ciò che il calcolatore era per la comunità matematica e alcune persone potrebbero dimenticare come fare a lungo divisione.

È stato utile?

Soluzione

Hai ragione nel nascondere l'SQL dietro il livello di ActiveRecord significa che le persone potrebbero dimenticare di controllare l'SQL generato. Sono stato morso da questo stesso: indici mancanti, query inefficienti, ecc.

Ciò che ActiveRecord consente è semplificare le cose:

Post.find(1)

vs

SELECT * FROM posts WHERE posts.id = 1

Tu, lo sviluppatore, hai meno da scrivere e quindi hai meno possibilità di errore.

La convalida è un'altra cosa che ActiveRecord rende facile. Devi farlo comunque, quindi perché non avere un modo semplice per farlo? Con le parti ripetitive, noiose, sottratte?

class Post < ActiveRecord::Base
  validates_presence_of :title
  validates_length_of :title, :maximum => 80
end

vs

if params[:post][:title].blank? then
  # complain
elsif params[:post][:title].length > 80 then
  # complain again
end

Ancora una volta, facile da specificare, facile da convalidare. Vuoi più convalida? Una singola riga da aggiungere a un modello ActiveRecord. Il codice contorto con più condizioni è sempre più difficile da eseguire il debug e il test. Perché non semplificarti?

L'ultima cosa che mi piace di ActiveRecord invece di SQL sono i callback. I callback possono essere emulati con trigger SQL (che sono disponibili solo in MySQL 5.0 o versioni successive), mentre ActiveRecord ha avuto callback da allora (ho iniziato con 0.13).

Per riassumere:

  • ActiveRecord semplifica le cose facili;
  • ActiveRecord rimuove le parti noiose e ripetitive;
  • ActiveRecord non ti impedisce di scrivere il tuo SQL ( di solito per motivi prestazionali) e infine;
  • ActiveRecord è completamente portatile attraverso la maggior parte dei motori di database, mentre SQL stesso non lo è (a volte).

So che nel tuo caso stai parlando specificamente di MySQL, ma comunque. Avere l'opzione è piacevole.

Altri suggerimenti

L'idea qui è che inserendo la logica del DB all'interno dei tuoi Active Records, hai a che fare con il codice SQL in un posto, piuttosto che diffonderlo in tutta la tua applicazione. Ciò rende più semplice per i vari livelli dell'applicazione seguire il principio di responsabilità singola (che un oggetto dovrebbe avere solo un motivo per cambiare).

Ecco un articolo sul modello Active Record .

Evitare SQL ti aiuta quando decidi di cambiare lo schema del database. L'astrazione è anche necessaria per tutti i tipi di cose, come la validazione. Non voglio dire che non riesci a scrivere SQL: puoi sempre farlo se ne senti il ??bisogno. Ma non è necessario scrivere una query a 5 righe in cui tutto ciò che serve è user.save. È la filosofia delle rotaie per evitare codici inutili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top