En primer lugar, ¿de qué Doctrina estás hablando, 1 o 2?
Hay una gran diferencia. Lo único que los dos tienen en común es que ambos son ORM-s de pleno derecho. De lo contrario, realmente no hay ninguna conexión entre los dos.
Doctrina 1 se basa en ActiveRecords, Doctrina 2 se basa en asignador de datos patrón.
Ambos pueden hacer las mismas cosas, pero hay algunas diferencias significativas entre los dos.
En general, el correlacionador de datos es menos "amigable para el desarrollador" pero debería tener un mejor rendimiento. ¿Por qué? En realidad, es bastante simple. Con los registros activos, cada entidad sabe todo "alrededor" de sí misma, su relación con otras entidades, etc. Con el mapeador de datos, las entidades son tontas y livianas, existe una entidad central (EntityManager/UnitOfWork en Doctrine2) que maneja todo el mapeo de relaciones. Entonces, en términos de uso de memoria y rendimiento, el mapeador de datos debe ser más rápido.
Los tipos de Doctrine dicen que Doctrine2 es al menos un 50% más rápido que Doctrine1 (también existen otras diferencias, no solo el patrón de diseño).
Si lo deseas, incluso puedes implementar ActiveRecords sobre el mapeador de datos Doctrine2. Mira esto blog post. Estoy usando este enfoque solo para la fase de desarrollo, para mantener el menor código posible. Una vez que entra en producción, mataré la capa ActiveRecords adicional y la retrotraeré al mapeador de datos predeterminado de Doctrine2.
Así que la conclusión es que puede hacer todo con ambos, pero de la misma manera podría decir que puede hacer todo con SQL sin procesar. Si eres un principiante en el mundo de ORM, te sugiero ir con ActiveRecords, porque es simple y (por lo general) requiere menos código. Por otro lado, si está construyendo un modelo grande y complejo, creo que el mapeador de datos es la mejor opción.
Tal vez tengo algo mal, pero así es como lo entendí.
En cuanto a la comparación entre CodeIgniters ActiveRecords y Doctrine (1 o 2), no puedo decirlo porque nunca utilicé CodeIgniter. Una cosa de la que estoy seguro es que Doctrine tiene muchas más características que el ORM predeterminado de CodeIgniters. Por ejemplo: hidratación del resultado, herencia (tabla única, tabla de clases), recuperación previa, carga diferida, carga adicional diferida, extensiones, comportamientos, optimización, proxies, manejo de fecha y hora ... Es un ORM masivo y completo con una gran cantidad de características, mientras que mi experiencia con cualquier "ORM marco predeterminado" es que su objetivo principal es ser lo más simple posible, por lo que un novato puede entenderlo muy fácilmente. Doctrine es una bestia poderosa, y de seguro puede hacer muchas cosas de una manera más eficiente y/o lógicamente más correcta que la construida en CodeIgniter ORM. La desventaja es que se necesita más tiempo para aprender y codificar, y es una gran biblioteca, con miles de archivos, de modo que solo para que todo funcione se agrega algo de gastos generales en comparación con una alternativa más ligera.
Doctrine es un ORM completo que implementa el patrón de registro activo. La clase de registro activo de CodeIgniter es más un generador de consultas basado en una versión "modificada" del patrón. – birderic
Hi birderic, Gracias por la respuesta rápida. ¿Puedes darme un ejemplo en el que esto entraría en juego? ¿Estamos hablando de cosas como las operaciones CRUD? – MatthewSchenker
Escribiré una respuesta más larga. No tengo experiencia con Doctrine, pero haré todo lo posible para comparar los dos. – birderic