Frage

Ich habe für eine Weile Web-Anwendungen entwickelt und ich bin sehr zufrieden mit mySQL, in der Tat, wie viele kann ich irgendeine Form von SQL verwenden fast jeden Tag. Ich mag die Syntax und haben null Probleme Abfragen oder die Optimierung meiner Tabellen zu schreiben. Ich habe genossen diese mysql api .

Die Sache, die mir wurde nervt ist Ruby on Rails verwendet Active und wandert alles, damit Sie Funktionen verwenden, um die Datenbank abzufragen. Ich nehme an, die Idee, die Sie zu sein „müssen nie wieder in SQL aussehen“. Vielleicht ist KISS dies nicht (halten Sie es einfach dumm), sondern ist die Active Schnittstelle wirklich am besten? Wenn ja warum?

Ist Entwicklung ohne gesunde eine SQL-Anweisung überhaupt schreiben zu müssen? Was passiert, wenn Sie jemals etwas nach oben suchen, dass nicht bereits als Schienen Funktion definiert ist? Ich weiß, sie haben eine Funktion, die mir eine benutzerdefinierte Abfrage zu tun erlaubt. Ich glaube, wirklich wollen, ich weiß, was die Leute denken, sind die Vorteile von Active über mySQL verwendet und wenn jemand wie ich der Meinung, dass vielleicht dies für die Schienen-Gemeinschaft sein würde, was der Rechner an die Mathe-Gemeinschaft war und einige Leute vergessen, wie lange zu tun Division.

War es hilfreich?

Lösung

Sie haben Recht, dass der SQL hinter Active der Schicht versteckt bedeutet, dass Menschen könnten vergessen, die generierten SQL zu überprüfen. Ich habe von dieser selbst gebissen worden. Fehlenden Indizes, ineffiziente Abfragen, etc.

Was Active erlaubt ist, die einfachen Dinge macht einfach:

Post.find(1)

vs

SELECT * FROM posts WHERE posts.id = 1

Sie haben die Entwickler, weniger zu geben, und haben somit weniger Chancen für Fehler.

Die Validierung ist eine andere Sache, dass Active macht einfach. Sie müssen es tun sowieso, warum also nicht eine einfache Möglichkeit, es zu tun haben? Mit den sich wiederholend, langweilig, Teile abstrahiert aus?

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

Auch hier einfach zu spezifizieren, einfach zu validieren. mehr Validierung wollen? Eine einzelne Zeile zu einem Active Modell hinzuzufügen. Convoluted Code mit mehreren Bedingungen ist immer schwieriger zu debuggen und zu testen. Warum nicht machen es einfach auf Sie?

Das letzte, was ich wie etwa Active wirklich anstelle von SQL sind Rückrufe. Rückrufe können mit SQL-Trigger emuliert werden (die in MySQL 5.0 nur verfügbar sind, oder oben), während Active Rückrufe da Art und Weise hatte damals (ich auf 0.13 gestartet).

Um es zusammenzufassen:

  • Active macht die einfachen Dinge einfach;
  • Active entfernt die langweilige, sich wiederholende Teile;
  • Active verhindert nicht von Ihre eigene SQL Schreiben ( in der Regel aus Performance-Gründen) und schließlich;
  • Active ist voll portabel accross die meisten Datenbank-Engines, während SQL selbst ist nicht (manchmal).

Ich weiß, in Ihrem Fall, Sie sprechen speziell über MySQL, aber immer noch. die Möglichkeit zu haben, ist schön.

Andere Tipps

Die Idee dabei ist, dass Ihre DB Logik in Ihrer Active Datensätze, indem Sie mit SQL-Code in einem Ort, es zu tun, und nicht alle über Ihre Anwendung zu verbreiten. Dies macht es einfacher für die verschiedenen Schichten der Anwendung der einheitliche Prinzip Verantwortung zu folgen (dass ein Objekt nur ein Grund zu ändern haben soll).

Hier ist einen Artikel auf der Active Record .

SQL vermeiden helfen Sie, wenn Sie das Datenbankschema entscheiden zu ändern. Die Abstraktion ist auch notwendig, für alle Arten von Dingen, wie Validierung. Ich nicht, dass Sie nicht SQL schreiben bekommen: Sie können immer tun, wenn Sie die Notwendigkeit spüren. Aber Sie müssen nicht eine 5 Linie Abfrage schreiben, wo alles, was Sie brauchen user.save ist. Es ist die Schienen Philosophie unnötigen Code zu vermeiden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top