28 Stimmen

DataMapper vs. ActiveRecord in Rails 3

Ich bin neugierig, was Sie Jungs denken über DataMapper und welche Vorteile bringt es über die neue und verbesserte ActiveRecord in Rails 3.

Ich weiß Ihre Meinung zu schätzen.

11voto

piyush Punkte 591

Ich ziehe DM dem AR vor. Meiner Meinung nach ist DM eigentlich ein ORM, während AR nur ein Wrapper um SQL ist. Mit DM ist es sehr einfach, zwischen Datenspeichern zu wechseln. Die Abfragesyntax von DM ist viel homogener usw. SEL (strategic eager load) lässt DM auch eher wie einen Objektspeicher aussehen als AR.

Außerdem werden in den DM-Klassen die Eigenschaften im Voraus definiert, was die Lesbarkeit des Codes erheblich verbessert. Ich habe nie Migrationen vermisst, nachdem ich zur DM-Welt gekommen bin. (auch wenn man sie haben kann, wenn man es wirklich möchte). Mit Rails 3 verwende ich fast ausschließlich DM.

2voto

Yuri Gadow Punkte 1804

Ich habe Active Record in Rails 2 und DataMapper in Merb und Rails 3 verwendet - jetzt verwende ich DM/Rails 3 täglich. Ich habe auf AR3 lesen, aber nur verwendet es in einem kleinen Projekt (ein in-house app.)

Ich habe festgestellt, dass der einzige Unterschied, der mir wirklich wichtig ist, die DM's sind. strategisches eifriges Laden . Sie tut selten das, was man sich erhofft, und was sie tut, ob richtig oder falsch, tut sie mit FM.

Mit ausdrücklicher eifriges Laden in AR Es steht außer Frage, was passieren sollte: Es sagt, was es tut und tut (normalerweise), was es sagt.

Automatisches" eifriges Laden klingt zwar gut, hat für mich aber zwei negative Folgen:

  1. nicht unerheblicher Zeitaufwand bei der Suche nach Quellen für übermäßige Abfragen
  2. Code, der mit Pseudo-Eager-Loading-Hacks übersät ist, bei denen Relationen materialisiert und verworfen werden, nur um sie und die Identitätskarte auf eine Weise zu präparieren, die gelegentlich nicht "klebt" und niemals selbstdokumentierend ist.

Ansonsten finde ich, dass AR und DM die gleichen Tiere mit unterschiedlichen Flecken sind. Im Gegensatz zu sagen, Sequel .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X