Doctrine 2: Enterprise Persistence Layer for PHP 5.3
Por zsamer en Noviembre 24, 2009
Quería compartir con ustedes una presentación muy buena sobre Doctrine 2 y las grandes ventajas que tiene respecto a sus otras versiones como la 1.2, resumiendo:
- Es mucho más rápido, 30% menos en uso de memoria
- 100% desacoplado
- Las clases de entidades no necesitan heredan de ninguna otra clase como en la 1.2 que obliga la herencia de Doctrine_Record, entidades mucho más desacopladas y reutilizables.
- NO nos impone otros métodos, propiedades, y otras basura en nuestro modelo de objetos de dominio o clases de entidades (En java se les conocen como POJO, DTO o Entity), ídem lo anterior, mucho más limpias y reutilizables
- Desarrollado completamente en PHP5.3, el futuro de PHP y desarrollo de aplicaciones empresariales
- Uso de namespace
- Toma lo mejor de los ORM de Java, está basado en Hibernate y EntityManager y JPA (Java Persistence API )
- Mucho más elegante, con estándares y buenas prácticas OOP e implementación de patrones de diseños
- y muchas otras
Les dejo la presentación de Jonathan Wage (miembro del equipo de desarrollo de Doctrine 2), muy recomendado, lo que si está en ingles
Doctrine 2 ORM en Zend Framewok: parte II
Por zsamer en Noviembre 23, 2009
Continuando con nuestro articulo anterior Doctrine 2 ORM en Zend Framewok: parte I, en esta oportunidad quiero compartir unos tips de como integrar ORM Doctrine 2 con Zend Framework, para ello va ser necesario haber leido también el articulo sobre Bootstrapping con Zend Application, que será nuestra base para la integración.
Lo primero que tenemos que hacer es descargar Doctrine 2 (actualmente 2.0.0-ALPHA3), descomprimir en la carpeta "library" del proyecto Zend y luego agregar en application.ini las siguientes lineas:
-
autoloaderNamespaces.doctrine = "Doctrine"
-
autoloaderNamespaces.proxies = "Proxies"
Con esto agregamos las librerías de Doctrine 2 en el Include Path de PHP.
Lo segundo que tenemos que hacer es crear un método _init en la clase Boostrap, a éste método le llamaremos _initDoctrine, obviamente
-
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
-
{
-
protected function _initDoctrine() {
-
$config = new Configuration();
-
$cache = new ApcCache();
-
$config->setMetadataCacheImpl($cache);
-
$config->setQueryCacheImpl($cache);
-
-
$config->setProxyDir(APPLICATION_PATH . "/../library" . DIRECTORY_SEPARATOR.'Proxies');
-
$config->setProxyNamespace('Proxies');
-
-
-
$this->bootstrap('db');
-
$connPDO['pdo'] = $this->getResource('db')->getConnection();
-
-
$conn = DriverManager::getConnection($connPDO, $config);
-
$em = EntityManager::create($conn, $config);
-
-
Zend_Registry::set('em', $em);
-
return $em;
-
}
-
}
Podemos observar que hace uso de namespace incluido en la versión 5.3 de PHP, también observamos que se hace uso de la conexión a la base de datos de Zend Db ($this->bootstrap('db')), configurado en "application.ini", obtenemos el objeto PDO de conexión y se lo entregamos al DriverManager de Doctrine 2
todo muy elegante ¿no?, finalmente lo guardamos en el Zend_Registry.
Lee el resto de este artículo »
Doctrine 2 ORM en Zend Framewok: parte I
Por zsamer en Noviembre 23, 2009
Como muchos sabemos Zend Framework ha estado desarrollando su propio ORM Zend Entity (definición de ORM), sin embargo el proyecto de ORM nativo de Zend ha quedado parado y descontinuado, el propio autor, Benjamin Eberlei (@beberlei (Twitter)), comenta las causas en el siguiente post.
Lamentable noticia, sin embargo ésta viene acompañada de una excelente noticia: a partir de ahora, Benjamin Eberlei dedicará todos sus esfuerzos a mejorar el ORM Doctrine 2 y su integración con el Zend Framework, sin duda alguna, Doctrine 2 es y lo será por lejos el mejor ORM de PHP desde su versión 5.3 (Doctrine 2 requiere PHP 5.3 o superior).
Las razones que dieron lugar a esta decisión son las siguientes:
- Le consume demasiado tiempo y ha llegado a una situación de bloqueo
- Zend_Entity sólo tiene un desarrollador y por eso no tiene ni la mitad de características de Doctrine 2
- La fecha prevista de finalización de Zend_Entity era de hasta seis meses, algo que no encaja muy bien con la planificación de las nuevas versiones de Zend Framework
Matthew Weier O’Phinney, máximo responsable de Zend Framework, está de acuerdo con la decisión y comenta al respecto:
"creemos que ayudar a mejorar un proyecto existente Doctrine y trabajar en su integración con Zend Framework será mejor para toda la comunidad de PHP".
Lee el resto de este artículo »
Implementar ORM en Zend Framework Db Table
Por zsamer en Agosto 29, 2008
Como todos ya sabemos, Zend Framework no tiene una implementacion de ORM propiamentetal, si cubre algunos aspectos pero no todos.
Dada esta carencia en Zend Framework y mi inquietud por este tipo de técnica o patrón, he querido dedicar tiempo y desarrollar uno implementado con Zend_Db_Table Relationships, sin alterar ni tocar ninguna de sus funcionalidades ya existentes. En otras palabras es un proyecto que tiene como finalidad dar mayor funcionalidad de ORM a Zend_Db_Table Relationships.
Me ha tocado trabajar en proyectos JEE que he utilizando Hibernate como ORM, a mi gusto uno de los mejores ORM en Java y también he trabajado con Propel en PHP5, y he tomado funcionalidades de ambos para incorporarlas en este proyecto. Lee el resto de este artículo »
ORM con Zend Framework
Por zsamer en Junio 28, 2008
En el post anterior había prometido escribir un articulo sobre implementar ORM con Zend Framework.
El mapeo objeto-relacional es una técnica de programación para convertir datos entre el sistema de tipos utilizado en un lenguaje de programación orientado a objetos y el utilizado en una base de datos relacional. En la práctica esto crea una base de datos orientada a objetos virtual, por sobre la base de datos relacional. Si estas interesado en como implementar esta técnica con Zend_Db_Table Relationships entonces continua leyendo.
Lee el resto de este artículo »
Integrando Propel con Zend Framework: Segunda Parte
Por zsamer en Junio 7, 2008
Estamos de vuelta con el articulo Integrando Propel con Zend Framework, en la Primera Parte vimos una introducción de Propel, estructuras de directorios de nuestro proyecto, finalmente como se configuran los archivos XML y se generan nuestros modelos a partir de los archivos de configuración para luego poder utilizarlos dentro de un proyecto con Zend Framework.
Hoy en esta segunda y ultima entrega veremos la integración con Zend Framework, para ello será necesario extender la clase Zend_Db_Adapter_Pdo_Mysql (utilizando mysql) y agregaremos un par de métodos y funcionalidades en la clase Core/Bootstrap de nuestro sistema cubierto en el artículos anterior Bootstrap Class.
Lee el resto de este artículo »
Integrando Propel con Zend Framework: Primera Parte
Por zsamer en Junio 2, 2008
En mi ultimo articulo Bootstrap Class había quedado comprometido de escribir un post sobre cómo integrar ZF con el ORM Propel, así que ha llegado el momento de cumplir lo prometido
.
Introduciendo un poco el termino ORM, mapeo objeto-relacional (más conocido por su nombre en inglés, Object-Relational mapping, o sus siglas O/RM, ORM, y O/R mapping) es una técnica de programación para convertir datos entre el sistema de tipos utilizado en un lenguaje de programación orientado a objetos y el utilizado en una base de datos. En la práctica esto crea una base de datos orientada a objetos virtual, por sobre la base de datos relacional. Esto posibilita el uso de las características propias de la orientación a objetos (básicamente herencia y polimorfismo).
Abrir dos conexiones paralelas a una misma base de datos no es una buena idea ni mejores practicas, podría producir graves problemas de rendimiento en nuestra aplicación y sobre todo si nuestro proyecto va a tener un importante numero de visitas interactuando con nuestra aplicación al mismo tiempo. La idea es poder hacer uso tanto de Zend_Db_Table como de Propel dentro de nuestro proyecto, pero aquí podríamos plantearnos la siguiente pregunta ¿Cómo implementar ambos ORM dentro de nuestro proyecto sin tener que abrir dos conexiones paralelas? La solución la iremos viendo en el transcurso de este post.
Este post no pretende abarcar temas de instalación ni de manual de uso de Propel, solo veremos su integración con Zend Framework y un breve ejemplo de uso, así que se da por hecho que el lector tiene algún conocimiento de Propel, en caso contrario pueden visitar el sitio y leer el manual.
La integración solo es valida para la versión 1.3 o superior de Propel (Propel 1.3), ya que a partir de la versión 1.3 Propel utiliza PDO en vez de Creole como capa de abstracción a la base de datos, sin duda un gran cambio, lo mejor que pudo haber hecho Propel
.
Para el lector que no tenga experiencia con Propel recomiendo leer el manual como mencioné más arriba y ademas leer el siguiente post Installing Propel object persistence layer for Web application (Cuidado: Creole ya no es necesario ya que utiliza PDO). Lee el resto de este artículo »
