Artículo
|
Conceptos básicos de ORM (Object Relational Mapping) |
Para todos aquellos que no conozcan el significado de las siglas ORM (Object Relational Mapping), diremos que es una técnica de programación para convertir datos entre el lenguaje de programación orientado a objetos utilizado y el sistema de base de datos relacional utilizado en el desarrollo de nuestra aplicación.
Actualmente, las bases de datos relacionales solo pueden guardar datos primitivos, por lo que no podemos guardar objetos que vayamos creando en nuestra aplicación, sino que lo que hacemos es convertir los datos del objeto en datos primitivos que si podremos almacenar en las tablas correspondientes de nuestras bases de datos. Si luego necesitamos ese objeto en alguna parte de nuestra aplicación, debemos de recuperar los datos primitivos de la base de datos y volver a construir el objeto.
El mapeo objeto-relacional lo que nos ayudará será precisamente a eso, a olvidarnos completamente de como convertir los objetos en datos primitivos para almacenarlos y viceversa.
El utilizar el ORM, nos puede proporcionar cierta ventajas, pero como todo en esta vida, también nos proporcionará una serie de desventajas que iremos viendo a continuación.
Ventajas
Desventajas
En la actualidad hay muchos tipos de framework que nos devuelven el mapeo objeto-relacional, según el lenguaje que estemos utilizando. Vamos a nombrar algunos de los mas utilizados.
Doctrine
Es un framework ORM para PHP 5.2 y posterior, y entre sus puntos fuertes destaca su lenguaje DQL (Doctrine Query Language) que está inspirado en el HQL de Hibernate.
Para crear el modelo, Doctrine nos da dos alternativa, hacer una clase por tabla e indicarle mediante PHP el tipo de datos que almacenaremos.
O bien utilizar un esquema en formato YAML (similar a XML, pero mas legible para las personas)
Propel
Es otro framework ORM para PHP 5 y superior y que está arropado por el framework Synfony. Podemos acceder y modificar los datos de la base de datos utilizando la lógica de programación orientada a objetos, en vez de utilizar los clásicos Select y Updates de SQL.
Por ejemplo, si queremos recuperar un libro de una base de datos para cambiar su título, lo podríamos hacer de la siguiente forma:
$book = BookPeer::retrieveByPK(5);
$book->setTitle(‘The Propel Story’);
$book->save();
Antes de utilizar Propel, deberemos de crear un archivo llamado schema.xml con la estructura de la base de datos, pero si ya la tenemos creada, Propel lo puede crear automáticamente.
Hibernate
Es una herrmienta ORM para la tecnología JAVA y disponible también para la tecnología .NET con el nombre de Nhibernate. Es software libre bajo la licencia GNU LGPL. Pueden ver mas información aquí.
LINQ
Es un ORM desarrollado por Microsoft para el mapeo objeto-relacional para los lenguajes Visual Basic. Net y C#. Incluye una herramienta llamada SQLMetal que permite la generación automática de clases directamente desde una base de datos MS-SQL.
Además de estos que hemos nombrado hay otros muchos como pueden ser QuickDB, iPersist, Java Data Objects, ….
Actualmente, las bases de datos relacionales solo pueden guardar datos primitivos, por lo que no podemos guardar objetos que vayamos creando en nuestra aplicación, sino que lo que hacemos es convertir los datos del objeto en datos primitivos que si podremos almacenar en las tablas correspondientes de nuestras bases de datos. Si luego necesitamos ese objeto en alguna parte de nuestra aplicación, debemos de recuperar los datos primitivos de la base de datos y volver a construir el objeto.
El mapeo objeto-relacional lo que nos ayudará será precisamente a eso, a olvidarnos completamente de como convertir los objetos en datos primitivos para almacenarlos y viceversa.
El utilizar el ORM, nos puede proporcionar cierta ventajas, pero como todo en esta vida, también nos proporcionará una serie de desventajas que iremos viendo a continuación.
Ventajas
- Rapidez en el desarrollo. La mayoría de las herramientas actuales permiten la creación del modelo por medio del esquema de la base de datos, leyendo el esquema, nos crea el modelo adecuado.
- Abstracción de la base de datos. Al utilizar un sistema ORM, lo que conseguidos es separarnos totalmente del sistema de Base de datos que utilicemos, y así si en un futuro debemos de cambiar de motor de bases de datos, tendremos la seguridad de que este cambio no nos afectará a nuestro sistema, siendo el cambio mas sencillo.
- Reutilización. Nos permite utilizar los métodos de un objeto de datos desde distintas zonas de la aplicación, incluso desde aplicaciones distintas.
- Seguridad. Los ORM suelen implementar sistemas para evitar tipos de ataques como pueden ser los SQL injections.
- Mantenimiento del código. Nos facilita el mantenimiento del código debido a la correcta ordenación de la capa de datos, haciendo que el mantenimiento del código sea mucho mas sencillo.
- Lenguaje propio para realizar las consultas. Estos sistemas de mapeo traen su propio lenguaje para hacer las consultas, lo que hace que los usuarios dejen de utilizar la sentencias SQL para que pasen a utilizar el lenguaje propio de cada herramienta.
Desventajas
- Tiempo utilizado en el aprendizaje. Este tipo de herramientas suelen ser complejas por lo que su correcta utilización lleva un tiempo que hay que emplear en ver el funcionamiento correcto y ver todo el partido que se le puede sacar.
- Aplicaciones algo mas lentas. Esto es debido a que todas las consultas que se hagan sobre la base de datos, el sistema primero deberá de transformarlas al lenguaje propio de la herramienta, luego leer los registros y por último crear los objetos.
En la actualidad hay muchos tipos de framework que nos devuelven el mapeo objeto-relacional, según el lenguaje que estemos utilizando. Vamos a nombrar algunos de los mas utilizados.
Doctrine
Es un framework ORM para PHP 5.2 y posterior, y entre sus puntos fuertes destaca su lenguaje DQL (Doctrine Query Language) que está inspirado en el HQL de Hibernate.
Para crear el modelo, Doctrine nos da dos alternativa, hacer una clase por tabla e indicarle mediante PHP el tipo de datos que almacenaremos.
// models/generated/BaseUser.php
class User extends BaseUser
{
public function setTableDefinition()
{
$this->hasColumn(\'username\', \'string\', 255, array(\'default\' => \'default username\'));
$this->hasColumn(\'name\', \'string\', 255, array(\'default\' => \'default name\'));
$this->hasColumn(\'age\', \'integer\', 4, array(\'unsigned\' => true));
// ...
}
// ...
}
O bien utilizar un esquema en formato YAML (similar a XML, pero mas legible para las personas)
# schema.yml # ... User: # ... columns: username: type: string(255) default: default username name: type: string(255) default: default name age: type: integer(4) unsigned: true # ...
Propel
Es otro framework ORM para PHP 5 y superior y que está arropado por el framework Synfony. Podemos acceder y modificar los datos de la base de datos utilizando la lógica de programación orientada a objetos, en vez de utilizar los clásicos Select y Updates de SQL.
Por ejemplo, si queremos recuperar un libro de una base de datos para cambiar su título, lo podríamos hacer de la siguiente forma:
$book = BookPeer::retrieveByPK(5);
$book->setTitle(‘The Propel Story’);
$book->save();
Antes de utilizar Propel, deberemos de crear un archivo llamado schema.xml con la estructura de la base de datos, pero si ya la tenemos creada, Propel lo puede crear automáticamente.
Hibernate
Es una herrmienta ORM para la tecnología JAVA y disponible también para la tecnología .NET con el nombre de Nhibernate. Es software libre bajo la licencia GNU LGPL. Pueden ver mas información aquí.
LINQ
Es un ORM desarrollado por Microsoft para el mapeo objeto-relacional para los lenguajes Visual Basic. Net y C#. Incluye una herramienta llamada SQLMetal que permite la generación automática de clases directamente desde una base de datos MS-SQL.
Además de estos que hemos nombrado hay otros muchos como pueden ser QuickDB, iPersist, Java Data Objects, ….
![]() |
Publicado por: angel carrero |
|
|
Comentarios
Últimas noticias
· factura
Últimos artículos














































