Un Poco Sobre ORM y Frameworks


ORM (Object Relational mapping), es una técnica que utiliza Programación Orientada a Objeto y los mapea directamente a la base de datos relacional. Es un concepto genérico que puede ser aplicado a cualquier lenguage (PHP, C++, Java …) así como cualquier base de datos relacional como MySQL, Postgree, Oracle. En cada lenguaje existen implementaciones propias las cuales se usan de igual manera independiente de su implementación, algunas gratis otras de pago.

En el presente artículo voy a hablar específicamente de aplicaciones web y mas específicamente de frameworks ORM desarrollados para PHP.

Generalmente si estamos trabajando en un proyecto a gran escala debemos persistir información en bases de datos, ya sean configuraciones como datos usados propiamente para la lógica del negocio. En PHP existen varias funciones embebidas para ello, las cuales pueden volverse un tanto engorrosas y poco organizadas cuando las operaciones requieren de un cierto nivel de conocimiento. Las aplicaciones como usualmente sucede crecen en módulos, se expanden así como seguramente el uso de consultas en nuestro código lo cual atenta la estética, preformance y escalabilidad.

Usando ORM si quisiéramos persistir un objeto el código sería tan sencillo como lo siguiente:

  $objVehicle = new Vehicle();
  $objVehicle->brand=”Mercedes”
  $objVehicle->owner=” Jhonny”;
  $objetivarle->sabe();

Primero creamos una instancia a la clase Vehicle ya previamente declarada. Asignamos valores a las funciones de acceso y por último la función guardar a través del ORM escogido persistirá el objeto en la base de datos. Simple, sencillo, elegante y escalable.

Algunos frameworks ORM

Doctrine

Un framework ORM de los mejores que he probado, permite escribir consultas a la base de datos en un lenguaje propio Doctrine Query Language (DQL). Permite la validación de datos antes de persistir los en la BD mediante hooks y soporta cacheo de consultas.

  $qb = $em->createQueryBuilder();
  $qb->select('u')
    ->from('User', 'u')
    ->where('u.id = ?1')
    ->orderBy('u.name', 'ASC');
  $qb->setParameters(array(1 => '500'));   
  $result = $quera->resultar();

Una vez creada la instancia de QueryBuilder, dicho objeto brinda una serie de funciones que brindan la posibilidad de construir consultas de manera fácil solo proporcionando los parámetros necesarios. El código antes expuesto se traduce en la siguiente consulta SELECT u.* FROM users u WHERE u.id = '500' ORDER BY u.name ASC, luego obtengo el resultado de la consulta.

Joomla framework

Jornala como todo framework es una colección de bibliotecas y herramientas, entre las cuales también tiene su manera de manejar las bases de datos relacionales.

  $database    =& JFactory::getDBO();
  $database->setQuery("UPDATE #__props SET link_published = 1 WHERE link_id = '$database->quote($LinkID)'");
  $databas->quera();

CakePHP

Framework que facilita el desarrollo de aplicaciones web, utilizando MVC. También como parte de sus herramientas tiene su manera particular de mapear objetos en la base de datos e implementa una serie de funciones para ello. Muy práctico y entre los más usados, simple y con una curva de aprendizaje en cierta manera menor que otros como Symfony o Zend framework.

public function some_function() {
    // ...
    $allArticles = $this->Article->find('all');
    $pending = $this->Article->find('all', array(
        'conditions' => array('Article.status' => 'pending')
    ));
    $allAuthors = $this->Article->User->find('all');
    $allPublishedAuthors = $this->Article->User->find('all', array(
        'conditions' => array('Article.status !=' => 'pending')
    ));
    // ...
}

A modo de conclusión

La mayoría de de los frameworks ORM generan el código requerido para las operaciones CRUD (Create Read Update Delete) en las bases de datos automáticamente. Esto ayuda a un rápido desarrollo y permite enfocarse solo en las funcionalidades de más nivel necesarias para la lógica del negocio. El mapeo de objetos a la base de datos, persistir datos, borrar o modificar entre otras operaciones el ORM implementa funciones para ayudar al programador. Convierte los tipos de datos de cada columna en las tablas y la mayoría presenta validaciones de entrada para prevenir ataques como SQL Injection entre otros. Hacen el código escalable y mucho más fácil de mantener.

Latest posts by Leroy Ley (see all)