2011-02-02 17 views

Respuesta

25

(7-Mar-2013) Negación: Esta respuesta es probablemente ahora un poco fuera de fecha. No estoy al día con la comunidad PHP en este momento y esta comparación es entre Doctrine ORM v2 y Zend Framework v1. Esta es una comparación manzanas vs naranjas porque son dos cosas diferentes.


Out-of-the-box Zend_Db es más sólo una base de datos de capa de abstracción mejorada en la parte superior de PDO, donde como Doctrina 2 es un Objeto Relational Mapper (que se encuentra en la parte superior de su propio DBAL).

Doctrine 2 es mucho mejor para las capas de dominio más complicadas, porque toda su lógica de negocio, lógica de persistencia, etc. están separadas en varias clases, por lo que no sirven para múltiples funciones. Además, debido a que tiene más clases, que son más limpias y están más unidas, hace que sea mucho más fácil probarlas.

Además, solo estará escribiendo una fracción del SQL que está usando Zend_Db, porque puede manipular los objetos de su entidad y Doctrine traduce esos cambios a la base de datos. ¡El SQL generado también aprovecha las transacciones que le dan un rendimiento decente!

Le recomiendo que lea sobre el diseño impulsado por el dominio para obtener una mejor comprensión de por qué Doctrine 2 es tan impresionante.

No me malinterpreten, sin embargo, se puede hacer con DDD Zend_Db pero no es realmente allí OOTB (porque no es un ORM), y no sería tan potente y como Doctrina 2.

con todas las funciones
+1

De acuerdo. Zend_Db es un desastre para cualquier proyecto medio o grande. Mientras que en Doctrine tienes un repositorio para cada entidad, con Zend_Db terminarás extendiendo Zend_Db_Table, que usa el patrón Table Data Gateway e incluyendo métodos como getAllAllowedUsers() con aduanas SQL uniendo varias tablas y dando como resultado un Zend_Db_Table_Row que en realidad no funciona No tiene nada con su modelo de negocio real. Entonces fusionas Zend_Db_Table con el patrón Repositorio. Tal vez se da cuenta de que realmente necesita un Data Mapper, por lo que comienza a crear su propia implementación, reinventando la rueda. –

+0

O peor: algunos desarrolladores crean las selecciones en el controlador. 'listAction() {' $ UsersTable-> select() '...' –

+0

Sé que esta es una vieja pregunta, pero en 2 años de doctrina 2 + zend framework experience no recomendaría absolutamente usar la doctrina 2 ES TAN lento LENTO, no es bueno para la aplicación web, tiene una gran abstracción pero también tiene grandes inconvenientes. – albanx

0

Si usted tiene un pequeño wich proyecto está obligada a utilizar un DBMS específico, que no necesitan ORM y Doctrina.

Si usted tiene un wich proyecto es grande y en el futuro puede ser que necesite adaptadores para cambiar de un DBMS a otro, lo que se podría considerar el uso Doctrina

Como se puede leer en la descripción Doctrina:

Doctrine 2 es un correlacionador de objetos (ORM) para PHP 5.3.0+ que proporciona persistencia transparente para objetos PHP. Se encuentra sobre una capa de abstracción de base de datos poderosa (DBAL). La tarea principal de Object-Relational Mappers es la traducción transparente entre objetos (PHP) y filas de bases de datos relacionales .

+1

defina "grande" :-) Gracias – opHASnoNAME

+1

Su respuesta implica que el beneficio principal de un ORM es la portabilidad de DBMS. Pero PDO simple, o realmente cualquier DBAL, lo proporciona.Encuentro que el beneficio real de un ORM es la distinción clara entre los propios modelos y su persistencia/hidratación hacia/desde un repositorio. –

0

Zend_DB y Doctrine usan diferentes formas. Zend_DB funciona como puerta de enlace de datos de tabla y puerta de enlace de datos de fila. Doctrine es mapeador de objetos.

En mis experiencias Zend_DB es suficiente y rápido para la mayoría de las tareas comunes. Doctrine es lento y usa más memoria que Zend_DB.

+0

En mi experiencia, es más difícil mantener un código que no tiene una separación clara entre la lógica de negocios y la capa de acceso a datos. Tiende a utilizar patrones de registro activo al tratar con su modelo. Por ejemplo, extendiendo Zend_Db_Table_Row y Zend_Db_Table o incluso creando tus propios mapeadores de datos y repositorios (patrón Repository). Definitivamente es para pequeños proyectos y equipos, creo. –