Prefacio
Sumario
Sobre este libro
El libro de Kumbia es un intento por comunicar todo lo que este framework puede hacer por usted. Le permite descubrir todos los aspectos de Kumbia y aprender por qué Kumbia puede ser la herramienta que estaba esperando para empezar a desarrollar su proyecto. Este libro se encuentra en etapa de continuo desarrollo, diseño gráfico, revisión ortográfica y gramática, contenidos, etc...tal como sucede con el framework, por lo cual se aconseja siempre disponer de la última versión.
Sobre Kumbia
Cumbia es el nombre de un ritmo musical del Caribe y Kumbia es un producto colombiano para el mundo. Programar debe ser tan bueno como bailar y Kumbia es un baile, un baile para programar. Kumbia es un framework de libre uso bajo licencia new BSD. Por lo tanto, puedes usar Kumbia para tus proyectos siempre y cuando tengas en cuenta la licencia. Te aconsejamos que siempre uses versiones estables y lo más recientes posibles, ya que se incluyen correcciones, nuevas funcionalidades y otras mejoras interesantes.
Más información: http://wiki.kumbiaphp.com/Licencia
Sobre la comunidad
La comunidad Kumbia esta formada sobre todo y en su gran mayoría por gente hispano-latina, de la cual nace un framework completamente en español y donde radica su mayor diferencia respecto a otros frameworks que son de forma nativa ingleses o americanos. Por otra parte se ha intentado, con el tiempo, aportar nuevos sistemas de comunicación, así pues primeramente se creó una lista de correo, después el foro, más tarde acceso a IRC y una WiKi. Esperamos que todo esto haga que la comunidad sea una parte importante y vital para enriquecer y mejorar Kumbia.
Puedes encontrar más información en www.kumbiaphp.com
Historia de Kumbia
Kumbia nació en un esfuerzo por no esforzarme para hacer las cosas. Puede sonar raro pero así fue. Un día empecé a hacer un proyecto de un sistema de información donde habían muchos formularios y dije: - Esta cosa siempre es lo mismo, así que si yo hiciera algo para no repetir tanto y sólo escribir lo que cambiaba en cada formulario entonces sería más rápido.
Después de haber terminado las funciones para generar los formularios me dí cuenta que habían quedado muy bien y entonces lo empecé a implementar en otras cosas. Así es que Kumbia nació de una aplicación real y lo puse a disposición de la Comunidad.
Mi trabajo era muy independiente del objetivo de sistema de información que se iba a desarrollar con los generadores de formularios, así que me propuse usarlo en otro proyecto. El resultado fue muy bueno, había logrado desarrollar algo más del 70% de un sistema de información en tan sólo unos días.
Entonces me puse a organizar las funciones, comentar código y mejorar la instalación para que pudieran ser usadas en otros proyectos.
En esa época propuse llamar el proyecto AuroraForms, agregué alguna funcionalidad extra y decidí darle propaganda en algunos foros de Internet. Quise darle un tono interesante al proyecto promulgué las facilidades que ofrecía y puse un demo para que otros pudieran comentar sobre él.
Esperaba que mucha gente se interesara, pero lo único que logré fue muchas críticas “constructivas”. El proyecto no tenía documentación así que era como decirles miren lo que sé hacer, pero no les digo cómo usarlo. No era mi intención pero fue un error publicar sin documentar. Igualmente es necesario hacer muchas cosas para crear un proyecto de software libre y no pensé que tuviera que tener en cuenta tantas cosas para que así fuese. Otro paso importante fue acoger la licencia GNU/GPL en vez de otra, como la BSD o la MIT, que aunque son menos restrictivas no favorecen el movimiento del software libre y eso es algo que quise transmitir con el proyecto.
Pienso que el software libre permite crear el ambiente de colaboración ideal que quería lograr con el proyecto, liberar las ideas permite que otros intervengan y busquen el camino ideal esperando aportar y ayudar con algo que le pueda servir a toda la comunidad. Buscar la mejor forma de hacer las cosas a veces puede resultar difícil, pues si encontramos alguna, que probablemente parezca la mejor, no siempre es aceptada por los demás y terminan rechazando las ideas que queremos vender, así demos todos los argumentos del caso.
Tiempo después fui contratado para desarrollar un software algo grande y que patrocinaba el esfuerzo de trabajar en Kumbia. El resultado fue muy bueno, siempre me empeño en dar lo mejor cuando trabajo en un proyecto, así que el framework empezó a crecer y la funcionalidad agregada forma gran parte de lo que hoy es como tal.
Trabajar en una aplicación real con características versátiles incrementó la estabilidad y las soluciones creadas para necesidades reales aumentó su funcionalidad.
Algún tiempo después fue agregado el proyecto a sourceforge.net y esto también ha sido un gran logro para posicionar Kumbia como un proyecto serio y con futuro. Las herramientas proporcionadas en este forge dieron pie para empezar a mejorar muchos aspectos que estuvieron centralizados por mucho tiempo. El proyecto ahora posee muchas características que han ayudado a su crecimiento como por ejemplo los muchos servidores que replican Kumbia en todo el mundo, el sistema de gestión de bugs, el svn y el más reciente dominio kumbia.org.
Muchas personas han sido también fundamentales para levantar este proyecto sin duda, la colaboración tanto en apoyo económico, moral, de desarrollo, motivación a usuarios, comprobación de funciones, sugerencias y pruebas han contribuido a lo que es el proyecto hoy como tal. Aun en el auge de las frameworks para php y otros lenguajes, Kumbia fue pensado desde un punto de vista muy diferente. Al pasar de los días el objetivo de este proyecto se volvía cada vez más claro. Kumbia debía ser potente como para desarrollar proyectos a nivel empresarial; pero al mismo tiempo sencillo, tanto que hasta alguien que empezara a desarrollar en PHP pudiera adoptarlo como herramienta de trabajo saltándose muchos días de leer y releer tutoriales de principiantes.
Es muy motivador cuando dicen que nuestro trabajo es “fácil de usar”, “práctico” o “útil” ya que se ha logrado satisfacción colectiva. La motivación engranada con el deseo de hacer las cosas bien es algo que busco constantemente. Pienso que los límites de la computación empezaron a verse muy lejanos cuando el Internet entró en furor, para mí creo que marcó lo que siempre ha sido mi visión de lo que quiero. Programar para Internet es mi constante y la preocupación por aprender y mejorar es el pilar de todo lo que hago para él.
Programar fácil es importante. Cuando escribo código, primero sueño y luego trabajo por ese sueño. Escribo código pensando si esto fuera tan sólo esto, entonces ya hubiera terminado sin hacer casi nada. Luego dedico varias horas para que ese poquito haga todo lo que tiene que hacer sin dañar la fantasía. Luego me dí cuenta que así funciona todo y que muchas cosas nos tocan fáciles por el trabajo soñador de otros.
Depende de la cultura, se pueden rechazar una propuesta cuando parece muy alocada o inalcanzable para el medio en la que se plantea. Encontrar las personas que tengan suficiente experiencia o necesidad para apoyar ideas o contribuir con el mejoramiento de éstas puede ser una larga tarea, pero cuando las encuentras, te motivas a continuar y a mejorar, porque piensas que puede ser útil para alguien más. Con esta introducción espero se haya interesado por este libro y por este proyecto que también fue pensado y desarrollado para alguien como usted.
Andrés Felipe Gutierrez
Creador de Kumbia
Que aporta Kumbia
Kumbia es un esfuerzo por producir un framework que ayude a reducir el tiempo de desarrollo de una aplicación web sin producir efectos sobre los programadores.
- Está basado en los siguientes conceptos:
- Fácil de aprender.
- Fácil de instalar y configurar.
- Compatible con muchas plataformas.
- Listo para aplicaciones comerciales.
- Convención sobre Configuración.
- Simple en la mayor parte de casos pero flexible para adaptarse a casos más complejos.
- Soportar muchas características de Aplicaciones Web actuales.
- Soportar las practicas y patrones de programación mas productivos y eficientes.
- Producir aplicaciones fáciles de mantener.
- Basado en Software Libre.
El principal principio es producir aplicaciones que sean prácticas para el usuario final y no sólo para el programador. La mayor parte de tareas que le quiten tiempo al desarrollador deberían ser automatizadas por Kumbia para que él pueda enfocarse en la lógica de negocio de su aplicación. No deberíamos reinventar la rueda cada vez que se afronte un nuevo proyecto de software.
Para satisfacer estos objetivos Kumbia está escrito en PHP5. Además ha sido probado en aplicaciones reales que trabajan en diversas áreas con variedad de demanda y funcionalidad. Es compatible con las bases de datos disponibles actuales mas usadas:
- MySQL.
- PostgreSQL.
- Oracle.
El modelo de objetos de Kumbia es utilizado en tres capas diferentes:
- Abstracción de la base de datos.
- Mapeo Objeto-Relacional.
- Modelo MVC (Modelo, Vista, Controlador).
Características comunes de Aplicaciones Web son automatizadas por Kumbia:
- Plantillas (TemplateView).
- Validación de Formularios.
- Administración de Caché.
- Scaffolding.
- Interacción AJAX.
- Generación de Formularios.
- Efectos Visuales.
- Seguridad.
Kumbia utiliza otros proyectos de software libre para complementar su funcionalidad:
- FPDF: Reportes en formato PDF
- Prototype: Javascript crossbrowser
- Scriptaculous: Efectos visuales
- PHPMailer: Correo Electrónico
- Smarty: Motor de Plantillas potente y fácil de usar
Se tiene previsto que para la version 0.6 se adapte JQuery para el manejo de AJAX
¿Porque usar Kumbia?
Es muy Fácil de Usar: Empezar con Kumbia es extremadamente fácil, es sólo descomprimir y empezar a trabajar.
- Realmente Agilizamos Trabajo: Crear una aplicación muy funcional con Kumbia, es cuestión de horas o minutos, así que podemos darle gusto a nuestros clientes sin que afecte nuestro tiempo. Gracias a las múltiples herramientas que proporciona el framework para agilizar el trabajo podemos hacer más en menos tiempo,
- Separar la Lógica de la Presentación: Una de las mejores prácticas de desarrollo orientado a la Web es separar la lógica, de los datos y la presentación, con Kumbia es sencillo aplicar el patrón MVC (Modelo, Vista, Controlador) y hacer nuestras aplicaciones mas fáciles de mantener y de crecer.
- Reducción del uso de otros Lenguajes: Gracias a los Helpers y a otros patrones como ActiveRecord evitamos el uso de lenguajes SQL o HTML (en menor porcentaje), ya que Kumbia hace esto por nosotros, con esto logramos código mas claro, natural y con menos errores.
- ¡Kumbia habla Español!: La documentación, mensajes de error, archivos de configuración, comunidad, desarrolladores, ¡¡hablan español!!, con esto no tenemos que entender a medias otros Frameworks o quedarnos cruzados de manos porque no podemos pedir ayuda.
- Aprender a usar Kumbia es cuestión de 1 día: Cuando leemos toda la documentación no tardamos más de 1 día, esto nos permite adoptar todo su poder sin perder tiempo leyendo largas guías.
- Sin darnos cuenta aplicamos los Patrones de diseño de moda: Los patrones de diseño son herramientas que facilitan el trabajo realizando abstracción, reduciendo código o haciendo más fácil de entender la aplicación. Cuando trabajas en Kumbia aplicas muchos patrones y al final te das cuenta que eran mas fáciles de usar de lo que se escuchaban.
- Kumbia es software Libre: No tienes que preocuparte por licenciar nada, Kumbia promueve las comunidades de aprendizaje, el conocimiento es de todos y cada uno sabe cómo aprovecharlo mejor.
- Aplicaciones Robustas, ¿no sabía que tenía una?: Las Aplicaciones Empresariales requieren arquitecturas robustas, Kumbia proporciona una arquitectura fácil de aprender y de implementar sin complicarnos con conceptos raros o rebuscados.
Modelo, Vista, Controlador (MVC)
¿Qué es?
En 1979, Trygve Reenskaug desarrolló una arquitectura para desarrollar aplicaciones interactivas. En este diseño existían tres partes: modelos, vistas y controladores. El modelo MVC permite hacer la separación de las capas de interfaz, modelo y lógica de control de ésta. La programación por capas, es un estilo de programación en la que el objetivo primordial es la separación de la lógica de negocios de la lógica de diseño, un ejemplo básico de esto es separar la capa de datos de la capa de presentación al usuario. La ventaja principal de este estilo, es que el desarrollo se puede llevar a cabo en varios niveles y en caso de algún cambio sólo se ataca al nivel requerido sin tener que revisar entre código mezclado. Además permite distribuir el trabajo de creación de una aplicación por niveles, de este modo, cada grupo de trabajo está totalmente abstraído del resto de niveles, simplemente es necesario conocer la API (Interfaz de Aplicación) que existe entre niveles. La división en capas reduce la complejidad, facilita la reutilización y acelera el proceso de ensamblar o desensamblar alguna capa, o sustituirla por otra distinta (pero con la misma responsabilidad). En una aplicación Web una petición se realiza usando HTTP y es enviado al controlador. El controlador puede interactuar de muchas formas con el modelo, luego el primero llama a la respectiva vista (interfaz de usuario) la cual obtiene el estado del modelo y lo muestra al usuario en una respuesta HTTP.
Implementación y uso
Kumbia aprovecha los mejores patrones de programación orientada a la web en especial el patrón MVC (Modelos, Vista, Controladores). Este capítulo describe el funcionamiento general de este paradigma en Kumbia. El objetivo de este patrón es el realizar y mantener la separación entre la lógica de nuestra aplicación, los datos y la presentación. Esta separación tiene algunas ventajas importantes, como Podemos identificar más fácilmente en qué capa se está produciendo un problema con sólo saber su naturaleza. Podemos crear varias presentaciones sin necesidad de escribir varias veces la misma lógica de aplicación. Cada parte funciona independiente y cualquier cambio centraliza el efecto sobre las demás, así que podemos estar seguros que una modificación en un componente realizará bien las tareas en cualquier parte de la aplicación.
Información adicional
La base de Kumbia es el MVC, un tradicional patrón de diseño que funciona en tres capas
Modelos: Representan la información sobre la cual la aplicación opera, su lógica de negocios.
Vistas: Visualizan el modelo usando páginas Web e interactuando con los usuarios de éstas.
Controladores: Responden a acciones de usuario e invocan cambios en las vistas o en los modelos según sea necesario.
En Kumbia los controladores están separados en partes, llamadas front controller y un en un conjunto de acciones. Cada acción sabe cómo reaccionar ante un determinado tipo de petición. Las vistas están separadas en templates, layouts y partials. El modelo ofrece una capa de abstracción de la base de datos utilizada además dan funcionalidad agregada a datos de sesión y validación de integridad relacional. Este modelo ayuda a separar el trabajo en lógica de negocios (modelos) y la presentación (Vistas).
Por ejemplo, si usted tiene una aplicación que corra tanto en equipos de escritorio y en dispositivos de bolsillo entonces podría crear dos vistas diferentes compartiendo las mismas acciones en el controlador y la lógica del modelo. El controlador ayuda a ocultar los detalles de protocolo utilizados en la petición (HTTP, modo consola, etc.) para el modelo y la vista.
Finalmente, el modelo abstrae la lógica de datos, que hace a los modelos independientes de las vistas La implementación de este modelo es muy liviana mediante pequeñas convenciones se puede lograr mucho poder y funcionalidad.
Caso práctico
Para hacer las cosas más claras, veamos un ejemplo de cómo una arquitectura MVC trabaja para un agregar al carrito. Primero, el usuario interactúa con la interfaz seleccionando un producto y presionando un botón, esto probablemente valida un formulario y envía una petición al servidor.
- El Front Controller recibe la notificación de una acción de usuario, y luego de ejecutar algunas tareas (enrutamiento, seguridad, etc.), entiende que debe ejecutar la acción de agregar en el controlador.
- La acción de agregar accede al modelo y actualiza el objeto del carrito en la sesión de usuario.
- Si la modificación es almacenada correctamente, la acción prepara el contenido que será devuelto en la respuesta – confirmación de la adición y una lista completa de los productos que están actualmente en el carrito. La vista ensambla la respuesta de la acción en el cuerpo de la aplicación para producir la página del carrito de compras.
- Finalmente es transferida al servidor Web que la envía al usuario, quien puede leerla e interactuará con ella de nuevo.