2010-03-10 7 views

Respuesta

3

La diferencia está en qué tan separados están los objetos de dominio de la capa de acceso a datos. Con ActiveRecord, es todo un objeto, lo que lo hace muy simple. Especialmente si tus clases se asignan uno a uno a tu base de datos. El correlacionador de datos es más flexible y permite que su dominio sea probado fácilmente independientemente de cualquier código de infraestructura de acceso a datos. Pero la complejidad tiene un precio.

0

Tengo que admitir que no sé doctrina o Xyster pero al menos puedo dar una idea de la diferencia entre Active Records como se aplica en Rubí frente ORM como subsónico, LINQ to SQL, NHibernate y Telerik. Con suerte, al menos le dará algo para explorar más.

de Ruby Active Record es su biblioteca nativa de acceso a datos- no es un mapeo de una biblioteca de interfaz SQL existente (por ejemplo .NET SqlDataTables) en las construcciones de la lengua - que es la biblioteca de interfaz. Esto les dio a los diseñadores más libertad para construir la biblioteca de una manera más integrada, pero también requirió que implementaran una amplia gama de herramientas SQL que normalmente no encontrarían en un ORM (por ejemplo, los comandos DDL son parte de la interfaz de Active Record de Ruby).)

ORM son mapeados a la estructura de base de datos subyacente usando un paso manual en el que un generador de código se abrirá una base de datos y escanear a través de él - la construcción de objetos correspondientes a las tablas (y procedimientos almacenados) que encuentra. Estos objetos se construyen utilizando las construcciones de programación SQL de bajo nivel ofrecidas como parte del lenguaje (por ejemplo, las bibliotecas .NET System.Data.Sql y SqlClient). El objetivo aquí es proporcionar a las bases de datos relacionales orientadas a registros una interfaz más fluida y fluida mientras se está programando: para reducir el "desajuste de impedancias" entre el modelo relacional y la programación orientada a objetos.

Como nota al margen, MS ha dado un paso muy similar a "registro activo" en la construcción de construcciones de lenguaje nativo en C# a través de Linq a SQL y Linq a entidades.

Espero que esto ayude!

1

La diferencia principal es que en DataMapper el modelo se define en la propia clase rubí:

class Post 
    include DataMapper::Resource 

    property :id,   Serial 
    property :title,  String 
    property :body,  Text 
    property :created_at, DateTime 
end 

Mientras que en ActiveRecord la clase es sobre todo una clase vacía y la framwork escanea la base de datos. Esto significa que necesita una base de datos predefinida o usar algo como migraciones para generar el esquema, esto mantiene el modelo de datos separado del ORM.

DataMapper.auto_migrate! 

generaría el esquema para usted.

ActiveRecord es diferente en este aspecto:

class Post < ActiveRecord::Base 
end 

En DataMapper no hay necesidad de migraciones, como automigrations pueden generar el esquema o buscar las diferencias entre el modelo y la base de datos y migrar para usted. También hay soporte para la migración manual que puede usar para casos no triviales.

También DataMapper es mucho más sintaxis de "ruby", y características como la carga diferida cuando se realizan condiciones encadenables (como ActiveRecord en Rails 3) están ahí desde el principio.

Datamapper también tiene la función de que cada registro en la base de datos se correlaciona con un objeto ruby, lo que no ocurre con ActiveRecord. Por lo tanto, si sabe que los registros de la base de datos son los mismos, sabrá que dos referencias al objeto ruby ​​también señalarán el mismo objeto.

En el lado contrario, mientras que Rails 3 puede prometerle marcos intercambiables, la herramienta Datamapper railtie (dm-rails) no está lista para producción y es posible que muchas funciones no funcionen.

Consulte este page para obtener más información.

1

Como dijo blockhead, la diferencia radica en cómo elige separar los objetos de dominio de la capa de acceso a datos.

En pocas palabras, activo "Registro" asigna un objeto a un registro en la base de datos.

Aquí, Un objeto = Un registro.

Por lo que sé, datos "asignador" los mapas de un objeto con los datos, pero no tiene por qué ser un registro - que podría ser un archivo también.

Aquí, un objeto no tiene que ser un registro

Es así porque el objetivo de este patrón: para mantener el en la representación de la memoria y el almacén de datos persistente independientes unos de otros y el propio asignador de datos .

Al no colocar este 1 objeto = 1 restricción de registro, Data Mapper hace que estas dos capas sean independientes entre sí.

Cualquier sugerencia/corrección a mi respuesta es bienvenida, en caso de que estuviera equivocado en alguna parte.

Cuestiones relacionadas