2010-09-30 33 views
8

Me he encontrado con un par de ORM que recientemente anunciaron que planean trasladar su implementación de Active Record a Data Mapper. Mi conocimiento de este tema es muy limitado. Entonces, ¿una pregunta para aquellos que saben mejor es que Data Mapper es más nuevo que Active Record? ¿Estaba cerca cuando comenzó el movimiento de Active Record? ¿Cómo se relacionan los dos juntos?Data Mapper es una tendencia más moderna que Active Record

Por último, dado que no soy una persona de la base de datos y sé poco sobre este tema, ¿debo seguir un ORM que se está moviendo a la implementación de Data Mapper, como en mi caso como alguien que escribe software (no una persona de datos) ?

Respuesta

19

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.

0

mis 2 centavos:

DataMapper es más reciente que ActiveRecord. Me gusta mejor la sintaxis de DataMapper; es más explícito y menos "mágico". Podría ir por más razones, pero se enumeran aquí: http://datamapper.org/why

ActiveRecord tiene mucha más documentación.

+0

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

+0

La pregunta parece haber cambiado desde que la contesté :( – phaedryx

+0

La pregunta nunca ha cambiado. Solo se han editado las etiquetas. – jblue

Cuestiones relacionadas