Sequel in Verbindung mit ActiveRecord irgendwelche Probleme?

8

Ich erwäge, Sequel für etwas meiner haarigeren SQL zu verwenden, die ich in Active Record zu schwer finde.

Gibt es irgendwelche Dinge, auf die ich achten muss, wenn ich Sequel und ActiveRecord für dasselbe Projekt verwende? (Neben den offensichtlichen wie keine AR-Validierungen in der Fortsetzung usw.)

    
Sam Saffron 05.08.2009, 23:45
quelle

2 Antworten

20

Disclaimer: Ich bin der Sequel-Betreuer.

Sequel ist einfach neben oder anstelle von ActiveRecord zu verwenden, wenn Sie Rails verwenden. Sie müssen die Datenbankverbindung manuell einrichten, ansonsten ist die Verwendung ähnlich. Ihre Sequel-Modelldateien werden in App / Modellen gespeichert und funktionieren ähnlich wie ActiveRecord-Modelle.

Das Einrichten der Datenbankverbindungen ist nicht mühsam, es ist im Allgemeinen eine Zeile in environment.rb, um eine Fortsetzung zu benötigen, und eine Zeile in jeder Umgebungsdatei (development.rb, test.rb, production.rb), um etwas zu tun:

DB = Sequel.connect (...)

Es ist also nur mühsam, wenn Sie 4 Zeilen Setup-Code für langweilig halten.

Die Verwendung von Raw SQL ist im Allgemeinen kein Problem, es sei denn, Sie zielen auf mehrere Datenbanken ab. Der Hauptgrund, es zu vermeiden, ist die erhöhte Ausführlichkeit. Sequel unterstützt die Verwendung von Raw SQL mindestens so einfach wie ActiveRecord, aber die Zeiten, in denen Sie Raw SQL verwenden müssen, sind in Sequel im Allgemeinen recht selten.

BTW, Sequel wird mit mehreren Validierungsplugins ausgeliefert. Das validation_class_methods-Plugin ähnelt ActiveRecord-Validierungen mit Klassenmethoden. Das Plugin validation_helpers hat eine einfachere Implementierung mit Methoden auf Instanzebene, aber beide können ungefähr dasselbe tun.

Wenn Sie bereits ActiveRecord-Code verwenden, der Ihren Vorstellungen entspricht, lohnt es sich wahrscheinlich nicht, den Code auf Sequel zu portieren, es sei denn, Sie möchten Features hinzufügen.

    
Jeremy Evans 06.08.2009, 20:21
quelle
3

Ich persönlich würde es nicht tun. Es wäre mühsam, nur die Verbindung mehr oder weniger manuell zu verwalten. Ich wäre eher geneigt, wenn Sequel die stärkere Option wäre, auf Rails 3.0 zu warten (oder vielleicht gegen Edge Rails zu entwickeln), wo es relativ einfach sein sollte, ORMs zu wechseln, wenn Yehuda und Co. ihre Sachen richtig machen . Viel mehr Merb-artig als jetzt, zumindest.

Das war die Meinung von DHH zu diesem Thema (ich sage nicht, dass es als Evangeliumswahrheit verstanden werden sollte, Verstand, aber es ist, sozusagen, vom Mund des Pferdes):

  

Aber ist nicht Sql schmutzig?

     

Seitdem Programmierer angefangen haben   Schicht objektorientierte Systeme an der Spitze   von relationalen Datenbanken haben sie   kämpfte mit der Frage, wie   tief, um die Abstraktion zu führen. Etwas   objekt-relationale Mapper suchen   Beseitigung der Verwendung von SQL vollständig,   Streben nach objektorientierter Reinheit durch   Erzwingen aller Abfragen durch ein anderes OO   Ebene.

     

Active Record nicht. Es wurde gebaut   auf die Vorstellung, dass SQL weder ist   dreckig noch schlecht, nur wortreich in der   triviale Fälle. Der Fokus liegt auf   die Notwendigkeit beseitigen, mit dem umzugehen   Ausführlichkeit in diesen trivialen Fällen aber   die Ausdruckskraft für halten   harte Abfragen - der Typ SQL war   geschaffen, um mit elegant umzugehen.

     

Deshalb sollten Sie sich nicht schuldig fühlen   wenn Sie find_by_sql () verwenden   entweder Leistungsengpässe oder hart   Abfragen. Beginnen Sie mit dem   objektorientierte Schnittstelle für   Produktivität und Vergnügen, und das Bad   unter der Oberfläche für ein   Nah-Metall-Erfahrung, wenn Sie   muss.

(Das Zitat wurde hier gefunden, der Originaltext ist auf p334 von < a href="http://www.pragprog.com/titles/rails3/agile-web-development-with-rails-third-edition"> AWDRWR , das "Hängematten" Buch).

Ich denke, das ist vernünftig.

Sprechen wir über etwas, das find_by_sql nicht verarbeiten kann? Oder reden wir über komplexe Nicht-SELECT-Sachen, mit denen execute nicht umgehen kann?

Irgendwelche Beispiele, die wir uns anschauen könnten?

    
Mike Woodhouse 06.08.2009 09:38
quelle