Me gustaría saber de aquellos que han usado Doctrine 2 (o posterior) y Propel 1.5 (o posterior). La mayoría de las comparaciones entre estos dos mapeadores relacionales de objetos se basan en versiones antiguas: Doctrine 1 versus Propel 1.3 / 1.4, y ambos ORM experimentaron un rediseño significativo en sus revisiones recientes. Por ejemplo, la mayoría de las críticas a Propel parecen centrarse en las clases "ModelName Peer ", que en cualquier caso están en desuso.
Esto es lo que he acumulado hasta ahora (y he tratado de hacer esta lista lo más equilibrada posible ...):
- Impulsar
- Pros
- Extremadamente compatible con IDE, porque se genera código real, en lugar de depender de métodos mágicos de PHP. Esto significa que las características IDE como la finalización de código son realmente útiles.
- Rápido (en términos de uso de la base de datos: no se realiza introspección en tiempo de ejecución en la base de datos)
- Migración limpia entre versiones de esquema (al menos en la versión 1.6 beta)
- Puede generar modelos PHP 5.3 (es decir, espacios de nombres)
- Fácil de encadenar muchas cosas en una sola consulta de base de datos con
useXxx
métodos como métodos. (Ver el video "finalización del código" arriba)
- Contras
- Requiere un paso de construcción adicional, es decir, construir las clases modelo.
- El código generado debe reconstruirse cada vez que se cambia la versión de Propel, se cambia una configuración o se cambia el esquema.
Esto puede no ser intuitivo para algunos y se pierden los métodos personalizados aplicados al modelo. (¿Creo?)- No es cierto; los métodos personalizados no se pierden porque la clase generada es una clase base; Propel proporciona una clase de entidad específicamente para extensión. - Algunas características útiles (es decir, comportamiento de versión, migraciones de esquema) están en estado beta.
- Pros
- Doctrina
- Pros
- Más popular
- Doctrine Query Language puede expresar relaciones entre datos potencialmente más complicadas de lo que es posible con la estrategia ActiveRecord de Propel.
- Es más fácil agregar comportamientos reutilizables en comparación con Propel.
- Los comentarios basados en DocBlock para construir el esquema están incrustados en el PHP real en lugar de un archivo XML separado.
- Utiliza espacios de nombres PHP 5.3 en todas partes
- Contras
- Requiere aprender un lenguaje de programación completamente nuevo (Doctrine Query Language)
- Implementado en términos de "métodos mágicos" en varios lugares, lo que hace que el autocompletado IDE no tenga valor.
- Requiere introspección de la base de datos y, por lo tanto, es un poco más lento que Propel de forma predeterminada; el almacenamiento en caché puede eliminar esto, pero el almacenamiento en caché agrega una complejidad considerable.
- Se incluyen menos comportamientos en la base de código central. Varias características que Propel proporciona de forma inmediata (como el Conjunto anidado) están disponibles solo a través de extensiones.
- Freakin 'ENORME :)
- Pros
Sin embargo, esto lo he deducido solo leyendo la documentación disponible para ambas herramientas; en realidad, aún no he construido nada.
Sin embargo, me gustaría saber de aquellos que han usado ambas herramientas, para compartir su experiencia sobre los pros / contras de cada biblioteca, y cuál es su recomendación en este momento :)