108 votos

ORM PHP: Doctrina vs Propel

Estoy empezando un nuevo proyecto con symfony , que es fácilmente integrado con Doctrine y Propel, pero yo, por supuesto, necesita para tomar una decisión.... me preguntaba si las personas más experimentadas por ahí general, ventajas y/o desventajas para ir con cualquiera de estas dos?

Muchas gracias.

EDICIÓN: Gracias por todas las respuestas, cosas útiles. No hay realmente la respuesta correcta a esta pregunta, así que voy a marcar como aprobado por la que obtuvo los más populares hasta los votos.

59voto

phidah Puntos 2602

Me gustaría ir con la Doctrina. A mí me parece que es una forma mucho más activa del proyecto y de ser el predeterminado ORM de symfony es mejor compatible (aunque oficialmente el Orm se consideran iguales).

Además yo, como la forma de trabajar con consultas (DQL en lugar de Criterios):

<?php
// Propel
$c = new Criteria();
$c->add(ExamplePeer::ID, 20);
$items = ExamplePeer::doSelectJoinFoobar($c);

// Doctrine
$items = Doctrine_Query::create()
       ->from('Example e')
       ->leftJoin('e.Foobar')
       ->where('e.id = ?', 20)
       ->execute();
?>

(La doctrina de la aplicación es mucho más intuitivo para mí).

También, yo realmente prefiero la manera de administrar las relaciones en la Doctrina.

Creo que esta página de la Doctrina de la documentación es la pena leer: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained

Para resumir: Si me estaban comenzando un nuevo proyecto o que tenía que elegir entre el aprendizaje de la Doctrina y de Impulsar me gustaría ir para la Doctrina de cualquier día.

34voto

Jan Fabry Puntos 3977

Yo soy parcial, ya que me ayuda un poco en la próxima versión de Propel, pero debe tener en cuenta que Impulsan fue de hecho el primer ORM disponible, luego quedado un poco cuando la Doctrina se creó, pero ahora tiene un desarrollo activo de nuevo. Symfony 1.3/1.4 viene con Propel 1.4, donde la mayoría de las comparaciones de parar en Impulsar 1.3. También, la próxima versión de Propel (1.5) contienen una gran cantidad de mejoras, especialmente en la creación de vosotros Criterios (lo que resulta en menos código para escribir).

Me gusta Propel, porque parece ser menos compleja que la Doctrina: la mayor parte del código está en las pocas clases generadas, mientras que la Doctrina se ha dividido de la funcionalidad en un montón de clases. Me gusta tener una buena comprensión de las bibliotecas que estoy usando (no mucha "magia"), pero claro, tengo más experiencia con Propel, así que tal vez la Doctrina no es tan complicado detrás de las escenas. Algunos dicen que Impulsar es más rápido, pero usted debe comprobar por ti mismo, y considerar si este supera a otros diferencias.

Tal vez usted debería considerar también la disponibilidad de los plugins de Symfony para los diferentes marcos. Creo Propel tiene una ventaja aquí, pero no sé cuántos de la lista de plugins todavía están actualizados con la última versión de Symfony.

19voto

Bryan M. Puntos 9403

Cabe señalar Doctrina 2 está actualmente en desarrollo en libertad [ed] y funciones casi completamente diferente de la actual versión estable de la Doctrina 1. Se basa en los Datos del Asignador de patrón en lugar de Active Record, y utiliza un 'gerente de la entidad " para manejar la persistencia de la lógica. Cuando se libera, se llevará más parecido a Java Hibernate (Doctrina 1 es más como Rails' ActiveRecord).

He estado desarrollando con la versión alpha de la Doctrina 2, y hay que decir que es la cabeza y los hombros por encima de la Doctrina 1 (es sólo mi opinión, y yo nunca he usado Propel). Hay buenas posibilidades de que la Doctrina de la comunidad se moverá hacia ella, cuando se suelta.

Me gustaría animar a que usted echa un vistazo a la Doctrina, pero si usted prefiere el Registro Activo estilo que Impulsan y Doctrina uso ahora, usted puede querer seguir con Propel.

17voto

lo_fye Puntos 4422

Se reduce a la preferencia personal. Yo uso Impulsar porque (entre otras cosas) me gusta el hecho de que todo tiene su propio hormigón getter y setter método. En la Doctrina, este no es el caso.

Propel:

$person->setName('Derek');
echo $person->getName();

Doctrina:

$person->name = 'Derek';
echo $person->name;

La razón por la que me gusta tener getters y setters es que no se puede poner todo tipo de lógica, si la necesito. Pero eso es sólo mi preferencia personal.

También debo añadir que aunque Propel fue de lento movimiento en el pasado, ahora está bajo desarrollo activo de nuevo. Se ha publicado varias nuevas versiones en los últimos meses. La versión más reciente de Impulsar incluye una "fluidez en la interfaz de consulta" similar a la Doctrina, de modo que usted no tiene que utilizar Criterios ya que si usted no lo desea.

5voto

Las dos referencias son algo anticuadas, de modo que usted, sin embargo, cubren algunas generalidades, básicamente tendrías que evaluar su experiencia con el framework como tal, una desventaja importante a la doctrina, es la incapacidad para tener un IDE que permite automática de código en el que propel es un ganador, las curvas de aprendizaje de propulsión y doctrina, son muy diferentes, es más fácil para impulsar, si su proyecto se necesita para manejar la complejidad del modelo de datos de usos de la doctrina, si quieres trabajar de forma rápida con un ORM que está mejor documentado y encontrar más apoyo en Impulsar a Internet usos, es mucho más maduro y creo que los más usados.

http://propel.posterous.com/propel-141-is-out

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X