Ist Data Mapper ein modernerer Trend als Active Record?

8

Ich bin auf ein paar ORMs gestoßen, die kürzlich 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?

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 jemand ist, der Software schreibt (keine Daten-Person)?

    
jblue 30.09.2010, 06:23
quelle

2 Antworten

19

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

Der Hauptgrund für Änderungen besteht darin, dass ActiveRecord sorgt nicht für ein gutes 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 ein AR also eine 1: 1-Darstellung eines Datenbankeintrags, was ihn besonders für einfache CRUD geeignet macht.

Einige Leute fügten das Holen verwandter Daten zu ihrem AR hinzu, was die Leute glauben ließ, dass AR ein ORM ist. Es ist nicht. Der Zweck eines ORM ist es, die objektrelationale Impedanzabweichung zwischen Ihrer Datenbankstruktur und Ihren Domänenobjekten zu beheben. 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 dennoch angewendet werden (zum Beispiel Lazy Loading).

Ein weiterer Grund, warum AR oft kritisiert wird, ist, dass es zwei Interessen 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 andererseits verschiebt Daten zwischen Objekten und einer Datenbank, während sie unabhängig voneinander bleiben und der Mapper selbst. Obwohl er schwieriger zu implementieren ist, ermöglicht er viel flexibleren Entwurf in Ihrer Anwendung. Ihre Domänenobjekte müssen nicht mehr mit der db-Struktur übereinstimmen. DAL und Domain-Layer sind entkoppelt.

    
Gordon 30.09.2010, 08:23
quelle
0

meine 2 Cent:

DataMapper ist neuer als ActiveRecord. Ich mag die Syntax von DataMapper besser; es ist expliziter und weniger "magisch". Ich könnte mehr Gründe durchgehen, aber sie sind hier aufgelistet: Ссылка

ActiveRecord hat viel mehr Dokumentation.

    
phaedryx 30.09.2010 07:15
quelle