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.
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
Die Frage scheint sich geändert zu haben, seit ich sie beantwortet habe :( – phaedryx
Die Frage hat sich nie geändert. Nur die Tags wurden bearbeitet. – jblue