2010-09-30 9 views
8

Ich bin auf ein paar ORMs gestoßen, die vor kurzem angekündigt haben, dass sie ihre Implementierung von Active Record nach Data Mapper verschieben wollen. Mein Wissen zu diesem Thema ist sehr begrenzt. Also eine Frage für diejenigen, die es besser wissen, ist Data Mapper neuer als Active Record? War es da, als die Active Record Bewegung begann? Wie verhalten sich die beiden zueinander?Ist Data Mapper ein modernerer Trend als Active Record?

Schließlich, da ich keine Datenbank-Person bin und wenig über dieses Thema weiß, sollte ich einem ORM folgen, der zur Data Mapper-Implementierung übergeht, wie in dem, was für mich als jemand geschrieben wird, der Software schreibt (keine Datenperson) ?

Antwort

19

Der DataMapper ist nicht moderner oder neuer, sondern eher für ein ORM geeignet.

Der Hauptgrund, warum Leute sich ändern, ist, weil ActiveRecorddoes not make for a good ORM. Ein AR umschließt eine Zeile in einer Datenbanktabelle oder -ansicht, kapselt den Datenbankzugriff und fügt diesen Daten eine Domänenlogik hinzu. Per Definition ist eine AR also eine 1: 1-Darstellung eines Datenbankeintrags, wodurch sie besonders für einfache CRUD geeignet ist.

Einige Leute fügten das Abrufen verwandter Daten zu ihrem AR hinzu, was die Leute glauben ließ, AR sei ein ORM. Es ist nicht. Der Punkt eines ORM ist, die object relational impedance mismatch zwischen Ihrer Datenbankstruktur und Ihren Domain-Objekten anzugehen. Wenn Sie AR verwenden, haben Sie diese Impedanzübereinstimmung nicht, da Ihr AR eine Datenbankzeile und nicht ein ordnungsgemäßes OO-Design darstellt. Sie binden Ihr DB-Layout an Ihre Objekte. Einige der objektrelationalen Verhaltensmuster können jedoch immer noch angewendet werden (zum Beispiel Lazy Loading).

Ein weiterer Grund, warum AR oft kritisiert wird, ist, weil es zwei Anliegen miteinander vermischt: Geschäftslogik und Datenbankzugangslogik. Dies führt zu einer unerwünschten Kopplung und kann bei größeren Anwendungen zu einer geringeren Wartbarkeit und Flexibilität führen. Es gibt keine Isolierung zwischen den zwei Schichten. Die Kopplung führt immer zu weniger Flexibilität.

Ein DataMapper auf der anderen Seite verschiebt Daten zwischen Objekten und einer Datenbank, während sie unabhängig voneinander und der Mapper selbst zu halten. Obwohl schwieriger zu implementieren, ermöglicht es viel flexibleres Design in Ihrer Anwendung. Ihre Domänenobjekte müssen nicht mehr mit der db-Struktur übereinstimmen. DAL und Domain-Layer sind entkoppelt.

0

my 2 cents:

DataMapper neuer als Active ist. Ich mag die Syntax von DataMapper besser; es ist expliziter und weniger "magisch". Ich könnte durch mehr Gründe gehen, aber sie sind hier aufgeführt: http://datamapper.org/why

ActiveRecord hat eine Menge mehr Dokumentation.

+0

AR und DataMapper sind sprachunabhängige Entwurfsmuster. Sie scheinen sich auf konkrete Implementierungen in der RoR-Welt zu beziehen, die das OP nicht verlangt hat. – Gordon

+0

Die Frage scheint sich geändert zu haben, seit ich sie beantwortet habe :( – phaedryx

+0

Die Frage hat sich nie geändert. Nur die Tags wurden bearbeitet. – jblue