Saporm: Simple abstraccion de bases de datos

Hace un par de dias venia en el bus hacia mi casa y se me ocurrio una idea. Muchos pensara que ya existe esto que se me ocurrio, que existen frameworks, etc. Pero mi idea es hacer algo mas simple aun, se me ocurrio la idea de desarrollar un ORM (Object Relational Mapping) simple, que me permita de manera sencilla abstraer la base de datos para poder trabajarla como objeto. Mientras veina en el bus, pensaba el modelo logico para llevar acabo esta idea, luego de unos dias por fin he podido empezar a codificar lo que será desde ahora en adelante: Saporm. Como Hibernate para Java o Doctrine para PHP, la idea de este ORM es hacer las cosas aun mas faciles y mi idea, principalmente, es orientarla a proyectos pequeños y no a enterprise.

La idea es que este ORM/Framework haga todas las tareas de consultas y accesos a la base de datos de manera mas simple, por ejemplo, en Saporm, para que el framework sea capaz de abstraer la base de datos solo hay que crear una clase con los atributos correspondientes, segun los campos que tenga la tabla de la base de datos.
Por ejemplo, tenemos dentro del directorio “model” la siguiente clase:
(Usuarios.class.php)

  1. < ?php
  2. class Usuarios extends Core{
  3.    /* Variables necesarias por el ORM, es necesario que se declaren */
  4.    public $table_name;
  5.    public $socket;
  6.  
  7.    /* Variables del usuario */
  8.    public $id;
  9.    public $username;
  10.    public $password;
  11. }
  12. ?>

Saporm se encargará, automaticamente, de mapear la tabla “Usuarios” con sus atributos “id, username y password” y nos permitirá trabajarla como si de un objeto se tratara. La herramienta nos creara un objeto con el nombre Usuarios que contará con varios métodos y atributos, como por ejemplo:

$usuarios->search();
$usuarios->loadData();
$usuarios->select();
$usuarios->query();
$usuarios->insert();
$usuarios->update();


Este framework será extendible a distintos motores de bases de datos, actualmente estoy desarrollandolo para MySQL y pienso exportarlo a PostgreSQL y a Oracle.
Hasta el momento no llevo mucho programado, pero he hecho avances significativos, me pasé todo el día programando y mentalizando el modelo mental/lógico para lograr lo que busco. Saporm tiene las funcionalidades para precargar datos desde distintas tablas y para hacer una busqueda condicionada.

A continuación, un ejemplo de es la estructura básica para implementar Saporm:

  1. require_once("Saporm.php"); //Incluimos el fichero necesario
  2.  $SimpleORM->init("mysql", "root", "123456", "localhost"); //Iniciamos y nos conectamos a una BD
  3.  $SimpleORM->database("dbabs"); //Seleccionamos la base de datos que deseamos usar

Con este codigo obtenemos una instancia de SimpleORM llamada $SimpleORM, podemos referenciarla para cambiarle el nombre para trabajar con un nombre de variable mas amigable, por ejemplo $db: $db = &$Saporm y, desde ahora en adelante, trabajaremos con el objeto $db.

Si queremos precargar los datos de la base de datos, tenemos el método loadData(), que pondra a nuestra disposicion un arreglo con todos los registros de la tabla en cuestion.

  1. $db->usuarios->loadData();
  2.  
  3. for($i = 0; $i < = 3){
  4.    echo "id: ".$db->usuarios->id[$i]." user:".$db->usuarios->username[$i];
  5. }

Esta seria una manera de listar los 3 primeros registros de la base de datos, previamente cargada en los atributos de la clase “usuarios”.

Tambien es posible hacer una busqueda con criterio usando el metodo search():

  1. print "Se encontraron: ".$db->posts->search("posts" => "%probando%")." registros.";
  2. foreach($db->posts->result as $result){
  3.   print $result[‘id’]."";
  4. }

Espero poder seguir con esta idea y lograr un ORM sencillo y facil de usar, que nos permita el desarrollo de proyectos pequeños en poco tiempo y de manera más agil. Cuando tenga un poco mas maduro el codigo lo pondre para que lo puedan descargar. Si alguien tiene ganas de unirse o darme feedback, puede contactarse conmigo sin ningun problema.

Editado (05-05-2009):
– Se unió osu (es que no le gusta que lo nombren) al desarrollo y decidimos cambiarle el nombre, ya que “SimpleORM” ya estaba creado como proyecto en SourceForge. Desde ahora lo llamaremos Saporm.

1 comentario

  1. Make sure to ask what the family likes, kids included. Or
    would restaurant certificates, movie passes and
    gag gifts be more practical. Its the perfect theme for expectant mothers of twins.

    My web page :: baby shower announcements wording
    (Angelika)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.