El DataMapper no es más moderno o más nuevo, pero es más adecuado para un ORM.
La razón principal por la que las personas cambian es porque ActiveRecorddoes not make for a good ORM. Un AR envuelve una fila en una tabla o vista de base de datos, encapsula el acceso a la base de datos y agrega lógica de dominio a esos datos. Entonces, por definición, un AR es una representación 1: 1 de un registro de base de datos, lo que lo hace particularmente adecuado para CRUD simple.
Algunas personas agregaron la obtención de datos relacionados a su AR, lo que hizo que las personas creyeran que AR es un ORM. No lo es. El objetivo de un ORM es abordar el object relational impedance mismatch entre la estructura de su base de datos y sus objetos de dominio. Al usar AR, no tiene este desajuste de impedancia porque su AR representa una fila de la base de datos y no un diseño de OO apropiado. Estás vinculando tu diseño de DB a tus objetos. Sin embargo, algunos de los patrones de comportamiento relacionales de objeto todavía se pueden aplicar (por ejemplo, la carga diferida).
Otra razón por la que AR a menudo se critica es porque entremezcla dos preocupaciones: lógica de negocios y lógica de acceso db. Esto conduce a un acoplamiento no deseado y puede dar lugar a menos mantenimiento y flexibilidad en aplicaciones más grandes. No hay aislamiento entre las dos capas. El acoplamiento siempre conduce a una menor flexibilidad.
A DataMapper por otro lado mueve los datos entre objetos y una base de datos manteniéndolos independientes entre sí y del asignador. Si bien es más difícil de implementar, permite un diseño mucho más flexible en su aplicación. Sus objetos de dominio ya no tienen que coincidir con la estructura db. DAL y la capa de dominio están desacopladas.
AR y DataMapper son patrones de diseño independientes del idioma. Parece que se refiere a implementaciones concretas en el mundo RoR, que no es lo que solicitó el OP. – Gordon
La pregunta parece haber cambiado desde que la contesté :( – phaedryx
La pregunta nunca ha cambiado. Solo se han editado las etiquetas. – jblue