Me gusta doctrine (active record) y Xyster (data mapper), ¿cuál es la diferencia?¿Cuál es la diferencia significativa entre el registro activo y el ORM basado en el mapeador de datos?
Respuesta
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.
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!
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.
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.
- 1. ¿Cuál es la diferencia entre el servicio web ordinario y el servicio web basado en jabón?
- 2. ¿Cuál es la diferencia entre el escaneo activo y el escaneo pasivo?
- 3. ¿Cuál es la diferencia entre python activo y python?
- 4. ¿Cuál es la diferencia entre: foco y: activo?
- 5. ¿Cuál es la diferencia entre el mango y el hilo?
- 6. Backbone.Js - ¿Cuál es la diferencia entre el y $ el?
- 7. ¿Cuál es la diferencia entre el NSImage y el UIImage?
- 8. ¿cuál es la diferencia entre el objetivo y el proyecto?
- 9. ¿Cuál es la diferencia entre el JSP y el JSTL?
- 10. ¿Cuál es la diferencia entre el tenedor y el hilo?
- 11. ¿Cuál es la diferencia entre el
- 12. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 13. ¿cuál es la diferencia entre los navegadores y el nodo?
- 14. ¿Cuál es el propósito del modificador -m?
- 15. ¿Cuál es la diferencia entre: = y + = en el archivo make?
- 16. ¿Cuál es la diferencia entre el operador "=" y "==" en Bash?
- 17. cuál es la diferencia entre las plantillas y el polimorfismo
- 18. ¿Cuál es la diferencia entre el cifrado GET y POST?
- 19. ¿Cuál es la diferencia entre el colado y la coerción?
- 20. ¿Cuál es la diferencia entre el casting y la conversión?
- 21. ¿cuál es la diferencia entre el material y la textura?
- 22. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 23. ¿Cuál es la diferencia entre el conjunto de datos y la base de datos?
- 24. ¿Cuál es la diferencia entre el esquema y el diccionario de datos?
- 25. ¿Cuál es la diferencia entre la tubería y el zócalo?
- 26. Indicando la diferencia estadísticamente significativa en el gráfico de barras
- 27. diferencia Autofac entre el Registro y RegisterType
- 28. ¿Cuál es la diferencia entre el formato .ipa y .app en el uso de iphone?
- 29. ¿Cuál es la diferencia entre VBScript's y el operador &?
- 30. ¿cuál es la diferencia entre net.tcp y el protocolo TCP?