lunes, 12 de noviembre de 2012

Cómo hacer un Widget en Yii Framework


Primero, el concepto tras un Widget, no solo en Yii Framework, sino en cualquier plataforma.

Un widget debe ser capaz de comunicarse con su controller y su action (o actions), debe ser capaz de lidiar con sus propios archivos JS y CSS (usando los assets), debe ser capaz de realizar el funcionamiento jQuery necesario (o javascript plano o lo que sea), ocultando a su usuario (y programador) la complejidad tras éste, aplicando el concepto de Encapsulamiento y Reutilización de la Programación Orientada a Objetos.  Un Widget ayuda a la "componentización" de tu sistema, delegando en estos funciones bien aisladas y reutilizables.
Repositorio con el Material del Widget:

https://bitbucket.org/christiansalazarh/ejemplowidget/overview


Arriba tienes la Url de un repositorio con todo el material necesario para hacer un widget funcional, que se conecta a tu aplicación usando un action que tu le provees, al cual le enviarás datos de ejemplo, en este caso el nombre y apellido de un usuario.

El Widget presentará un formulario simple que tras hacerle submit enviará los datos via ajax:

Aqui lo importante a destacar es: "El Concepto de Encapsulamiento de la POO", bajo el cual un objeto (el widget en este caso) DEBE ocultar la complejidad tras si para que quien lo use no deba lidiar cada vez con detalles que no vienen al caso de negocio.

No es en lo "precioso" que se ve...sino lo funcional, este widget de ejemplo le oculta al programador la necesidad de tener que construir cada vez un formulario para "reutilizarlo" en varias partes de su sistema.

Hay casos en donde una misma pieza de código siempre se debe "reutilizar" en un sistema o en varios (concepto de reutilización de la OOP) he aquí la necesidad del widget.

Es erróneo pensar que: Un widget es un adorno para presentar un bonito componente de UI. Es un error pensar así. Un widget es una pieza reutilizable de código,

por ejemplo:

Si te piden un sistema de comunicaciones en donde por todos lados es requerido presentar un mismo formulario complejo que pide y actualiza datos del cliente, pues bien, no vas a programar 10 veces el mismo formulario...sino los bugs te van a comer el proyecto, en cambio, haces un widget y lo reutilizas, además de ordenar tu proyecto puedes dedicar a una persona a realizar y mantener el widget, ayudando a la "componentización" (es un nuevo término que se usa en el diseño de sistemas, no es un invento mío).

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.