sábado, 10 de noviembre de 2012

Yii Framework - El lado oscuro de la luna



Me encanta Yii Framework, porque me permite bajar hasta el piso mas bajo, y llegar al piso mas alto, con extrema facilidad, pero hay cosas que me gustaría fueran resueltas, entre ellas los componentes de negocio reutilizables (mi intento actual para ayudar es la extensión eyui y el modulo cruge para rbac).

Todos los frameworks tienen pros y contras. incluso éste. Mas que todo las desventajas son relativas a lo que quieres hacer (no estamos hablando de "bugs" eso es otra cosa).

El usuario de Yii promedio viene de una linea de desarrollo muy baja con conceptos de OOP muy bajos, o a veces nulos y no se dan cuenta de los contras del framework..o..no le quieren herir el ego a nadie...o...no han necesitado ninguna de las cosa que pongo arriba....o simplemente responden con insultos o prepotencia.

En buena onda, quien piense que estoy equivocado discútalo sin prepotencia y sin insultos, aqui pongo lo que pienso en base a mi experiencia son los contras de Yii Framework:

Algunas cosas de Yii Framework que a veces me incomodan:
  1. Con yii framework se pueden hacer paginas web, pero no es la herramienta más óptima para hacer paginas web, para eso es mejor usar un CMF (content management framework), como lo es joomla, drupal o wordpress, el cual supera por mucho el alcance de yii framework, el cual esta orientado a aplicaciones web, mas no tanto a páginas web tradicionales.
  2. El uso de jQuery y Ajax aún depende mucho del conocimiento que tengas de ambos:, si tu conocimiento es bajo puedes pasar dias tratando de resolver un problema. El framework como tal no provee un eslabón jquery ajax "maduro, reutilizable y orientado a objetos" cómo lo provee en contraparte herramientas como GWT.
  3. Los componentes de negocio son muy básicos, hay que construir mucho para lograr un componente de negocio maduro, entre esos componentes que tratan de resolver el problema existe la extension EYui (la hice yo) la cual pretende acumular componentes de negocio reutilizables.
  4. El manejo de datos aun es muy crudo. Si bien algunos recordarán Clipper, FoxPro, incluso el terrible visualBasic, proveían entornos para manejar datos de forma muy madura, haciendo que solo uses los componentes ya listos, en cambio aqui en el framework hay que construir casi todo a menos que la extension exista, y si no existe te toca hacerlo de cero. El componente de datos estrella de yii framework es el CGridView, pero por mucho no le llega a componentes de datos de por ejemplo Clipper.  La CDataProvider ayuda muchísimo, la ayuda vendrá en aquellos componente reutilizables basados en ajax-jquery que provean soluciones en componentes de interfaz de usuario reutilizables.
  5. Comparado con el manejo de "flujos de datos" de Java (el IO), Yii esta en pañales. es mas, no tiene un conjunto de clases que maneje el IO como lo hace java, el cual por contraparte trae una linea muy madura de clases reutilizables bien modeladas para el manejo de flujos de datos (iostrings, iofiles, io-de-cualquier-cosa).
  6. Yii no aprovecha la compresion de Javascript para emitir contenidos compactos en javascript compreso multi-browser como lo hace GWT (google web toolkit).

Quiza en la Yii 2.0 se esten tratando o curando estos casos, pero lo que bien existe en Yii 1.0 es muy bueno.

10 comentarios:

  1. De acuerdo con lo que dices, otra de las cosas que veo que están muy amarrados al AR de Yii todos sus componentes, si como user quieres usar otro ORM te jodiste (moderarme si es necesario) o te toca crearte tu componente, además para principiantes como bien lo dijiste es muy interesante para comenzar con un framework y aprender o entender conceptos como MVC, AR, DAO, pero llegará el momento si eres curioso que caeras en manos de quien aprovecha mas las actualizaciones del lenguajes como SF2 (para muchos el framework que esta llevando la vanguardia ahorita)o zf que ahorita salio la versión 2 y aunque esta en pañales esta muy bien referenciada.

    Yii 2 según una presentación que salió hace algún tiempo y que trae cosas interesantes, pero aunque suene ilógico como bien me dijo un amigo lo importante no es el framework como tal, sino los componentes que te brinde, Yii 1.X ya es maduro y muchos de sus componentes o extensiones están paradas, si el framework no ofrece sencillamente lo que hace es correr a los dev que lo usan, personalmente lo que he usado de Yii ha sido para cosas muy simples y el framework me ha gustado y servido, pero hay veces que pregunto para cosas mas grandes se quedará corto y me tocará meterle a symfony?? esperó que no porque Yii me ha gustado mucho como framework base, es interesante ver lo que ofrecen, que mejoras nos pueden dar, aunque veo los componentes muy parados, en comparación con frameworks como zf y sf que a diario vez commits y pr en sus cuentas oficiales, creo que me extendí XD, saludos

    ResponderEliminar
    Respuestas
    1. aunque te respondi abajo con detalles, queria pedirte los links aqui publicados acerca de los frameworks que mencionas.

      Eliminar
  2. si muy claro carlos e igual de acuerdo. mi punto esta centrado en que veo a Yii como al "visualbasic" del mundo web, en el cual y haciendo la analogía en visualbasic todo era muy facil de hacer "peeeero"...todo estaba sin cohesión respecto al negocio, me explico mejor:

    Aunque yo no llegué a programar nunca en Fox ni en Clipper mi papá si y por mucho tiempo, desde la era de Clipper. En esos lenguajes los componentes de datos y otros que se ofrecían eran muy cohesionados y daban la solución inmediata, en cambio, si querías hacer lo mismo -en cualquier otro lenguaje- también podías pero tenías que reinventar los componentes de negocio que fox y clipper traían ya de caja. Incluso, el lenguaje como tal (orientado a sistemas de manejo de datos) ya de por si daba mucho en ventaja.

    Creo que esto esta pasando en Yii, sumado a lo que dices de que los componentes se estan quedando varados.

    Tenemos la vía de unificarnos para crear una capa de negocio de Yii que se pare encima del framework y provea componentes de negocio unificados reutilizables. (un inicio es Cruge, como un sub-framework rbac, e EYui como un un sub-framework de UI).

    La otra vía es seguir como vamos con componentes independientes desparramados a la orden de cada loco que inventa uno distinto (a veces bueno, a veces malo), esta vía terminará causando que Yii termine siendo una enorme "maquina de contar pelos", llena de complicaciones a nivel de core y con muy pocos componentes de UI que a la final es lo que necesitamos.

    De tanto atender el foro y ver todo lo que tenemos, no se si te has dado cuenta de algo: Los usuarios necesitan resolver un problema...no aprenderse de memoria las entrañas de Yii para poder poner una cajita que muestre algun dato, la cual terminas pondiendola con jQuery dejando a Yii solo como un proveedor de actions.

    ResponderEliminar
  3. presentacion de Yii2: http://www.slideshare.net/samdark/alexander-makarov-yii2-whats-new la presentación que habla de lo nuevo que trae Yii, aunque todavía no veo un repo para test ni nada lo veo lejos.

    https://github.com/symfony
    https://github.com/ZF-Commons
    https://github.com/zendframework

    Fijate los last update de cada uno de sus repo y fijate como lo trabajan, claro creo que hay mucha mas gente detrás de sf2 y de zf2 que de yii, pero el problema que le veo es que no hay nada con lo que el user pueda decir esto va bien.


    Chris visual basic really?? si le vuelves a decir así no lo toco más (aunque fue uno de mis primeros lenguajes luego que entendí lo que era me dio *****).


    Ahora hablando en serio, siempre uno como dev termina haciendo cosas como Cruge o EYui de manera que se pueda ver lo extendible del framework porque aveces hay cosas puntuales que el framework no resuelve, aunque pudiera ofrecer más siempre lo pienso.

    Ahora el usuario no debe de conocerse de memoria el framework pero si debe entender los conceptos bajo lo que esta realizado(en el foro hay varios ejemplos de lanza flechas :S que simplemente lo que hago es ver y callar), para poder saber que ofrece y como manejarlo, sino quedarás perdido en el espacio preguntando cosas como como hago una consulta de varias tablas en Yii?? o como puedo llamar un método de un controlador en otro?? viendo lo que esto significa (en mi opinión casi siempre que preguntan eso es un mal diseño o mal entendimiento de MVC y aveces del mismo framework), pero es solo una opinión.

    Saludos.

    ResponderEliminar
    Respuestas
    1. si bueno tu lo has visto, y hay conceptos graves de oop en la mayoria de las personas, hay subutilizacion extrema, reivento de rueda etc etc, y otros que ni mencionar que pienso que estan en el sitio equivocado o que simplemente para ellos la programacion es una manera de pasar el rato. pero eso es otro tema.

      con visual basic me refiero a que es entorno de desarrollo que traía muchos componentes que hoy muchos IDE modernos se copiaron (aunque la gente no crea), el syntax higlight vino de ahi, el hecho de ejecutar y depurar en caliente etc etc, a lo que voy con VB es que se parece a Yii en el sentido de que tiene todo para hacerlo, pero...hay que hacerlo, a diferencia de fox o clipper en los cuales no habia que reinventar cada vez un formulario master-detail, ya existe..y solo lo usas o lo adaptas. fijate los casos de master detail, es algo totalmente desarmado, aunque el esfuerzo por proveerles un ejemplo esta ahí en la seccion de ejemplos del foro aun asi no es una solución cohesionada para yii. no se si me explico.

      Caso e EYui, es una libreria para yii que "pretende" dar componentes de UI listos, aún así requiere de algo de conocimiento de OOP para poderlos conectar a la aplicacion del usuario.

      Si ves mi extension "coco", la hice bajo otro concepto, el de: "plugandplay". Solo lo pones, le das los nombres del metodo donde recibir el archivo y listo...pude haberla hecho como hice EYui: basada en interfaces, pero nadie te entiende las interfaces...y terminan haciendo un guiso con el codigo. En coco fue distinto, la gente enchufa coco y este funciona, y, la OOP la maneja coco por dentro.

      a algo asi me refiero con el resto de componentes de negocio que yii necesita:

      "inserar un master-detail, clic, propiedades y listo ya tienes un master detail"

      Eliminar
  4. muy buenas sus participaciones yo estoy hace poco usando yii (1 año) y ahe echo varias paginas con yii y me ha parecido muy bueno, me gustaría saber mucho como ustedes, que libro me recomiendan para aprender bien OOP y MVC como ustedes dicen que se debe saber.
    Me considero uno de los ejemplos que dice christian como usuarios de visualbasic con poco conocimiento en OOP y MVC.

    ResponderEliminar
  5. Muy buenas las experiencias. Gracias por compartirlas. Estoy estudiando tanto Yii y Symfony2 para ver por cual me decido. Por supuesto veo que symfony2 parecería ser mas robusto pero Yii me parece que es una excelente herramienta. Yo comenzare con ella puesto que lo usare para mi trabajo como administrativo y de paso voy estudiando. Hasta ahora he usado php en pelo con librerías pear. Deseen buena suerte.

    ResponderEliminar
  6. Hola, estoy de acuerdo contigo,

    en lo personal me gusta yii framework por la flexibilidad que proporciona para crear aplicaciones
    además lo prefiero por encima de otros lenguajes como asp.net o cualquier otro lenguaje que sea compilado, ya que yii es solo interpretado eso agiliza la codificación por mucho y el proceso de pruebas también.

    Saludos!

    ResponderEliminar
  7. Hola, me preguntaba si podrias ayudarme acerca de un problema que tengo, mi problema es el siguiente, yo necesito que en el sidebar de la página aparezcan los tweets de un usuario (esto ya lo hice) pero el usuario que está logeado en el momento tiene el "privilegio" de "esconder" sus tweets, lo cual primero tengo que grabar ese registro en la db para cuando lo quiera volver a mostrar este aparezca sin ningun problema, eso tengo que hacerlo mediante Ajax (esconder y mostrar el tweet), Cabe destacar que la vista es de un controlador diferente al de los tweets, es la vista de los usuarios donde me muestra sus entradas y los ultimos 6 tweets que este ha hecho (tomados desde twitter).

    Creo que estoy haciendo algo malo ya que el manda la información, porque en el firebug tengo una respuesta 200 OK, lo que entiendo que manda el POST, pero no llega a la accion tweet/create ya que no imprime el "echo" ni tampoco hace "var_dump", si es posible me gustaría que alguien me de algo de luz en este tema de Ajax.
    Muchas Gracias.

    ResponderEliminar
  8. Vaya!!
    Esta Web tiene la fuente mas incomoda para leer que he visto en toda mi vida.
    Para leerlo he tenido que copiar y pegar en el notepad.

    ResponderEliminar