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 :)
Respuestas:
A pesar de la tendencia actual de recomendar Doctrine, debo decir lo contrario. Tenga en cuenta que también, mis preferencias personales están orientadas a mis experiencias personales, pero cómo dijo @Dan, ambos son muy potentes.
No me gusta Doctrine por varias de las razones que dijiste antes, como el tamaño y los métodos mágicos son los que rompen el trato conmigo. Entonces, uso Propel , ¿por qué? principalmente porque es simplicidad y porque lo simple en el desarrollo de software es bueno . Mi creencia personal es que ser codicioso con los diseños es malo.
Con Propel, he logrado implementar una implementación de patrón de repositorio para mis propios sistemas, y funciona muy bien, sin mencionar el rendimiento de Propel, que es uno de los ORM más rápidos que he visto.
Entonces, mi respuesta básica es Propel , porque logra un buen software con menos código y le permite al IDE proporcionarle un buen intellisense sin perder el punto del software ORM que se conecta a la base de datos y lo hace bien ...
Espero poder ayudar
fuente
Su información sobre Doctrine 2 es incorrecta ...
No he usado Propel antes, pero Doctrine 2 es mucho más nuevo y tiene una base de código de muy alta calidad. Pero parece que Propel usa Active Record, Doctrine 2 usa el patrón Data Mapper.
La desventaja de que Doctrine 2 es más reciente es la falta de ejemplos de terceros, pero se está acumulando rápidamente.
Recomiendo Doctrine 2 ...
fuente
__get
y__set
(que es cierto) en lugar de métodos reales.Según sus comentarios, parece que está intentando elegir Propel o Doctrine para reemplazar o satisfacer su necesidad de un ORM en una aplicación heredada.
Dicho esto, creo que es importante no perder de vista el hecho de que cambiar a cualquiera de ellos podría ser una gran mejora para su aplicación. Entonces, no hay una verdadera respuesta incorrecta.
Por lo tanto, la solución que elija depende en gran medida de sus preferencias según sus respuestas a las siguientes preguntas:
Personalmente, recomendaría Doctrine 2 debido a su comunidad, documentación y arquitectura.
fuente
Te recomiendo Propel porque está bien integrado, es rápido y potente. Generar código es mejor que cargar clases en tiempo de ejecución, facilita los pasos de depuración y le muestra lo que ha creado. Entonces el paso de compilación no es un problema.
Doctrine2 no tiene comportamientos oficiales, y el patrón de diseño de DataMapper es genial pero difícil de usar en la vida real. Ah, y DQL es un lenguaje doloroso, pero aún antiguo para aprender ...
Si quiere pensar con objetos (sin DQL / SQL / lo que sea), elija Propel.
Doctrine2 es parte de Symfony2 de facto pero las cosas se moverán muy pronto, mira el último artículo de Fabien Potencier.
Saludos, William
fuente
Ambos son muy buenos. Hay algunos casos extremos en los que uno puede hacer algo, o hacer algo mejor, que el otro. Dondequiera que haya tenido problemas, se debió más a mi falta de conocimiento que a algo que no pudieron hacer.
Esto significa que la documentación y el soporte son más importantes que la capacidad intrínseca del código. ¿Conoces a alguien que pueda ayudarte cuando tengas problemas? ¿Qué tan bien te llevas con la documentación? ¿Uno de ellos simplemente se 'siente' más natural para usted?
fuente
Elegí Propel 1.63 para una gran aplicación mysql heredada (más o menos 200 tablas). Los factores aquí incluidos incluyen: soporte IDE que permite a los nuevos desarrolladores encontrar su camino fácilmente con la finalización del código; soporte de esquema de base de datos cruzada, rendimiento mejor soporte nativo para enumeraciones y el uso de varios comportamientos. En realidad, comencé con Doctrine, ya que Symfony2 tenía el mejor soporte, pero una vez que Propel mejoró enormemente su soporte con Symfony (la próxima plataforma a la que eventualmente migraré) cambié debido al mejor manejo de los problemas anteriores. Sin remordimientos en absoluto Propel es un ganador decisivo.
fuente