Un proyecto que ya tenía en mente desde hace un buen tiempo, era hacer un nano-framework. CakePHP es muy bueno, pero a veces es simplemente demasiado para lo que paga el cliente. El punto es que nunca llegué a nada concreto y Armando se me adelanto espectacularmente con Microbus :D
Microbus es mucho mejor de lo que yo tenía en mente, así que prefiero meterle mano a este que reescribir la rueda -como si no fuera suficiente. El único detalle es que le faltaba un modelo de base de datos. Autobahn fue el resultado que por algunas razones, no pude liberar antes. Falta mucho todavía, pero así es como funciona:
require('lib/autobahn.php'); $library = Autobahn::getConnection('default'); // Classic SQL $authors = $library->query('SELECT Author.id, Author.firstname FROM authors Author'); // Find (like Select) $book = $library->findBooksById(1); $books = $library->findAllBooks(); $favorites = $library->findAllBooksById(1,2,3,4,5); // Insert $newBook = array('id' => null, 'author_id' => 12, 'title' => 'Frameworks for PHP'); $library->insertBooks($newBook); // Update $values = array('title' => 'Frameworks for PHP 5', 'description' => '...'); $conditions = array('id' => 10); $library->updateBooks($values, $conditions); // Delete $library->deleteBooksById(10,11,12); // Show stats of all queries :) ... only for CLI mode, for now. $library->showLogs();
Lo que sigue es mejorar el generador de consultas, el cual está mal hecho y repartido entre el objeto que abstrae MySQL y el objeto abstracto administrador. Una parte del generador se hace en el objeto abstracto y eso está mal, según mi teoría. SQL debería ser un estándar universal -como el HTML/CSS, ja- pero en la práctica no lo es del todo, siempre hay mínimas diferencias y debo de cuidar este hecho.
Una vez hecho lo anterior, el siguiente paso es diseñar el modelo padre, del cual se van a instanciar los modelos creados para la aplicación. Aquí seré cuidadoso, porque podría cometer el error de crecer demasiado el código, cuando la idea es mantenerlo corto y simple. El objetivo a lograr sería que pudiera manejar la base de datos de la siguiente manera:
require('lib/autobahn.php'); require('model/book.php'); $book = new Book(); $book->author_id = 12; $book->title = 'Frameworks for PHP'; $book->save(); $book->showLogs();
Entre algunas otras ideas por ahí que rondan mi cabeza, esto es más o menos el resultado final que me gustaría. Pero siempre con el propósito de hacerlo corto y simple, por eficiencia y portabilidad principalmente. Ojalá a alguien le sirva :)
Un Trackback
[...] más trabajo tengo, más ganas me dan de seguir con proyectos más independientes. Incluyendo a Autobahn, tengo unos cuantos experimentos y proyectos que con un poco de suerte y trabajo, estarán listos [...]