Hola gentes. Sobre el uso de ORMs: estoy utilizando Doctrine en un par de proyectos y tiene sus pro y sus contras. Aquí va mi opinión:
Como varios sabrán, Doctrine define una capa más entre la aplicación y la base de datos, que mapea tablas de la base de datos en objetos, es decir: para cada tabla existirá una clase cuyos métodos permitirán la manipulación de los registros de la tabla, agregando, a la posibilidad de efectuar consultas, otras funcionalidades en cuanto a la forma de manipular los datos.
Tiene una sintáxis propia (DQL) que es bastante fácil de empezar a utilizar y muy buena documentación.
Desde que uno empieza a usar Doctrine no tiene que escribir un insert, o un delete, ni un update ya que éstos se incorporan a los objetos que creamos.
Para mí, la caraterística que más disfruto de Doctrine es la naturalidad con la que se manejan las listas de colecciones retornadas de una consulta. Especialmente si en esa consulta se efectuaron joins.
En un proyecto tuve que usar Doctrine y Ion Auth y no tuve problemas. La primer idea que se me vino en mente fue: en el archivo de configuración en el que Doctrine te permite definir la base de datos incluí las tablas de Ion_auth (de esta manera, cada vez que reconstruía la base de datos, esas tablas estaban incluídas). Y para el manejo de Ion Auth utilicé los models que ésta trae, en este caso las clases que genera Doctrine para las tablas de Ion están en desuso en mi aplicación.
Sobre el uso de sesiones pasa algo similar: como sabemos, en Codeigniter hay que crear una tabla para el manejo de sesiones, por lo tanto, en el archivo de Doctrine que define la base de datos (schema.yml) definí la tabla de las sesiones también.
Sobre la actualización tanto del core de CI como de Doctrine no se presentó ningún problema ya que doctrine se guarda en una carpeta propia, ajena al core, permitiendo que cualquiera de los dos sea actualizado independientemente del otro.
Otro punto a favor es que no hay que hacer loads de cada modelo ya que se puede definir el autoload para las clases de Doctrine y con esto, las clases del modelo estarán disponibles en todo momento.
Algunas contras:
-La versión 2 de Doctrine requiere un PHP bastante nuevo junto con PDO mysql y a veces no está disponible en todos los hostings compartidos, sin embargo la versión 1.2.4 acepta algunas versiones menos.
-Otro tema es el nombre de las clases de Doctrine que no debe ser igual a la de los controladores (es común tener un controlador Cliente y la clase del model deberá tener un nombre distinto y eso a veces complica un poco todo el proceso de diseño). Yo para no enredarme demasiado opté por agregar el "_model". Entonces si tengo un controlador Cliente, posiblemente tenga un modelo Cliente_model. Hay otras soluciones pero requieren codificación extra.
-Como Doctrine retorna una colección de objetos fácilmente iterables uno puede terminar cayendo vilmente en la tentación de pasar esa colección directamente a la vista, en la cual termina habiendo demasiado PHP lo que rompe un poco el patrón de diseño MVC de Codeigniter y luego las vistas son un poco complicadas de leer. Para evitar esto, a veces se requiere efectuar dos iteraciones: una en el controlador, creando el listado simplificado que vamos a pasar a la vista y luego volver a iterar en la vista para mostrar los datos.
-Performance. Punto sensible si los hay. Doctrine agrega una capa extra a la aplicación y esto significa más procesamiento. Aquí hay que evaluar si se acepta este costo a cambio de mayor flexibilidad en el desarrollo. Personalmente no he notado una gran caída de performance por usar doctrine.
Seguramente deben haber más cosas por pensar sobre la librería, éstas son las que yo me topé con las aplicaciones que tuve que hacer.
Entonces..usamos o no usamos Doctrine? a mi me gusta y me resulta muy cómodo. Lo que más peso tiene a la hora de desistir y volver a los models de CI es el hecho de las versiones de PHP. Si uno quiere que su aplicación sea lo más compatible posible, deberá trabajar con los models definidos por uno mismo.
Si conocemos de antemano el destino final de la aplicación, versión de PHP instalada, etc, entonces podremos evaluar la posibilidad de usar Doctrine de antemano.
Disculpen que se me hizo largo el mail. Saludos!