1. Desarrollo ágil
con
Yupp PHP Framework
A/C Pablo Pazos Gutierrez
JIIO 2008
2. Agenda
• Desarrollo ágil
– Ideas
• Frameworks (artefactos de software)
– Definición y objetivos
– Clasificación
– Agilidad en la programación
• Yupp Framework
– Generalidades
– Estado actual y futuro
– YORM
– YMVC
• Resumen
3. 1. Desarrollo ágil (I)
Objetivos:
– Utilizar herramientas que resuelvan problemas de programación
simples y repetitivos, para poder dedicar el tiempo a resolver otras
tareas más complejas que agreguen más valor al proyecto.
– Minimizar riesgos de desarrollar software en periodos cortos de
tiempo.
– Obtener resultados rápidamente.
– Posibilidad de adaptarse a requerimientos cambiantes o agregar
nuevos requerimientos sin afectar el avance del proyecto.
– Aumentar productividad del equipo de desarrollo y calidad del
producto.
– Comenzar el proyecto con código que funciona y no tiene errores.
4. 1. Desarrollo ágil (II)
• Yupp PHP Framework aumenta el “nivel”
de desarrollo que tiene PHP, mediante un
framework liviano (implementado 100%
utilizando primitivas PHP), simple de
aprender y utilizar, 100% orientado a
objetos, con convenciones para realizar
las tareas censillas y la posibilidad de
extenderse para manejar tareas más
complejas o no contempladas en las
convenciones.
5. 2. Frameworks (I)
• Según Wikipedia:
– Un framework, en el desarrollo de software
es una estructura de soporte definida en la
cual otro proyecto de software puede ser
organizado y desarrollado.
– Provee una estructura y una metodología de
trabajo.
– http://es.wikipedia.org/wiki/Framework
6. 2. Frameworks (II)
• Un framework no es una librería.
• Una librería apunta a reutilizar código y rutinas.
• Un framework apunta a reutilizar módulos y
componentes, que son elementos de diseño no
rutinas de implementación.
• La reutilización de módulos está en un nivel
mayor a la reutilización de rutinas.
• La reutilización de rutinas se aplica a la
programación procedural, mientras que la
reutilización de módulos se aplica más a la
programación orientada a objetos.
7. 2. Frameworks (III)
• Clasificaciones de frameworks por principal
funcionalidad:
– Acceso a datos
• Simplificar el acceso, conexión con múltiples motores de
bases de datos.
– Interfaz de usuario
• Simplificar la construcción y generación.
– Conectividad entre sistemas
• Web services, XML.
– Modularización
• Organización del código en unidades independientes y
reutilizables.
– Verticales (incluye todos los anteriores)
8. 2. Frameworks (IV)
• Ejemplo: framework vertical
– Componentes desarrollados + Framework = Sistema
– Yupp Framework es un vertical porque integra y simplifica todas
las funcionalidades: acceso a datos, comunicación, interfaz de
usuario y modularización.
9. 3. Yupp Framework (I)
• Yupp y su aporte al desarrollo ágil
– Comenzar el proyecto con código funcionando
– Tareas simples y tediosas resueltas
• No es necesario diseñar la base de datos: se genera
automáticamente a partir de la definición del modelo de datos
orientado a objetos.
• Tareas de ruteo de pedidos y obtención de parámetros (por
ejemplo valores enviados por un formulario) son manejados por el
framework. Además cuenta con validación automática de datos.
• Cuenta con herramientas que facilitan la generación de páginas y
favorecen la reutilización de código de presentación.
• Definición explícita de componentes ayuda a ordenar el código y
a reutilizar componentes entre distintas instalaciones de Yupp.
• Etc, etc....
10. 3. Yupp Framework (II)
• Objetivo:
– simplificar el desarrollo de sistemas web 2.0, y posibilitar
el prototipado rápido de aplicaciones.
• Usuarios: programadores / diseñadores (web, UI)
• Características:
– Desarrollado en PHP 5 (100% Orientado a Objetos)
– Open Source: Apache License 2.0
– Basado en convenciones (paradigma: convention over configuration)
– Orientado a componentes: extensión indefinida de la funcionalidad
– Módulos principales:
• YORM: Acceso a datos mediante Object Relational Mapping
• YMVC: Implementación del patrón Model-View-Controler
– Simple, fácil de aprender y usar, documentación creciente,
desarrollo y mejora constante.
11. 3. Yupp Framework (III)
• ¿Qué ofrece concretamente Yupp
Framework?
– Prototipos: sirve para desarrollar prototipos
funcionales, de sistemas complejos,
rápidamente.
– Sistemas web 2.0: sirve para desarrollar
sistemas completos de pequeño y mediano
porte en una forma ordenada, intuitiva, rápida y
simple.
– Futuro cercano: generación de código,
integración con otros sistemas, empaquetado e
instalación de componentes reusables.
12. 3. Yupp Framework (VI)
• Estado actual del proyecto (en dic-2008):
– v0.1.5
– Aprox. 50 clases y 10 KLOC
• ¿Por qué PHP?
– Lenguaje poderoso (PHP5 100% OO)
– Integrado con múltiples tecnologías: encriptado, WS, XML, HTTP,
sockets, email, proceso de imágenes, gran cantidad de DBMS, etc.
– Multiplataforma: Winows, Linux/Unix, MacOS
– Requiere infraestructura mínima:
• Servidor HTTP: Apache, Lighttpd, ...
• Intérprete PHP
– Soporte de múltiples IDEs (Implementado con Eclipse+plugins)
– Fácil de aprender
– Excelente documentación (http://www.php.net)
13. 3. Yupp Framework (V)
Futuro:
– Automatizar el procesamiento de artefactos de análisis/diseño: casos de uso y modelos
de datos, por ejemplo:
• Generar flujos de páginas web a partir de diagramas de flujo:
– Los diagramas de flujo, mostrando la interacción del usuario con el sistema, se desprenden de los casos de
uso ya especificados.
• Generar modelo de datos a partir de diagramas de clases:
– Yupp ya genera el esquema de la BD y las funcionalidades CRUD, por lo que a partir de un diagrama de
clases se podría tener un sistema funcionando con altas, bajas, modificaciones y consultas! (CRUD en
inglés)
• Generación automática de casos de prueba unitaria:
– Para cada clase del dominio, generar pruebas unitarias que permitan realizar testing para las operaciones
CRUD. Estos casos luego pueden ser extendidos o ampliados por el usuario.
– Generar modelo de datos a partir de bases de datos existentes:
• Para generar informes utilizando la API de consultas de Yupp
• Creación de nuevos sistemas de gestión basados en web sobre sistemas legado
– Fuentes de datos remotas (Yupp como front-end)
– Importar / exportar componentes entre aplicaciones (al estilo de paquetes)
14. 3. Yupp Framework (VI)
• Generación de flujos de páginas funcionales =
cliente contento + detección temprana en errores
de requerimientos
El cliente ve a la interfaz de usuario como todo el sistema
La interfaz de usuario funcionando en etapas tempranas
del proyecto agrega:
Visibilidad sobre el avance (para el cliente)
Posibilidad de detectar problemas en requerimientos
Posibilidad de detectar requerimientos ocultos
Aporta a la comunicación y agilidad del proceso
-Detecto un problema temprano
-Adapto el proceso rápidamente
-Sigo adelante
Yupp puede servir como herramienta de prototipado de
sistemas que no se implementen en PHP, pero igual se
quiera tener una UI rápidamente para mostrarle al cliente.
15. 3. Yupp Framework (VII)
• 2 componentes principales:
– YORM: encargada de la definición y persistencia
de los datos, agrega un capa de abstracción del
acceso a dato y una forma orientada a objetos
de realizar consultas.
– YMVC: implementación del patrón Model-View-
Controller, encargada de procesar los pedidos
HTTP del usuario, realizar precesamiento de la
información, determinar que vista mostrarle al
usuario y generar una página web (o algún tipo
de salida, p.e. XML).
16. 3. Yupp Framework: YORM
• YORM: Yupp Object-Relational Mapping
– Componente de acceso a datos y persistencia
– Definición de modelos de datos OO
– Generación automática de tablas en la BD
– Soporte para:
• Clases y atributos
• Links
– Unidireccionales / bidireccionales
– Diferentes cardinalidades: 1..1, 1..N, N..N
• Herencia
– Mapeo de única tabla (STI: single table inheritance)
– Mapeo de múltiples tablas (MTI: múltiple table inheritance)
– Validación automática
– API
• manipular la base de datos (CRUD)
• manejar el modelo OO
• manejar errores de validación
– Principio: la API maneja los casos más comunes de consultas
sin necesidad de escribir ni una línea de SQL.
17. 3. Yupp Framework: YORM
Tipos de links y opciones de mapeo de
herencia soportados por YORM.
19. 3. Yupp Framework: YORM
• Tablas generadas automáticamente a
partir de la implementación del modelo
de datos (ejemplo del blog)
20. 3. Yupp Framework: YORM
• Fuentes de datos remotas: futuro
– Integración con otros sistemas
– Yupp Framework como front-end (la fuente de datos está
en otro sistema, Yupp se encarga de la UI)
21. 3. Yupp Framework: YORM
• YORM API:
– Manejo de la base:
• static get(id:Integer) : PersistentObject // Cargar un objeto de la base
• static listAll() : List<PersistentObject> // Cargar todos los objetos
• static count(): Integer // Contar todos los objetos
• static findBy(c:Condition) : List<PersistentObject>
• static countBy(c:Condition) : Integer // Contar datos que cumplen condición
• validate(): Boolean // Validación automática de datos
• save(): Boolean // Insert o update, sabe cual hacer
• delete( logical: Boolean) // Eliminación física o lógica
– Manejo de errores de validación:
• hasErrors(): Boolean // Verifica si tiene errores
• getErrors(): List<FieldErrors> // Obtener errores de todos los campos
• getFieldError(fieldName:String) : FieldErrors
– Manejo de relaciones: (métodos dinámicos)
• getXXX(): PersistentObject | Datatype // Obtener el valor del atributo XXX
• setXXX( PersistentObject | Datatype ) // Establecer el valor del atrib. XXX
• addToXXX( PersistentObject ) // Agregar un elemento a una lista XXX
• removeFromXXX( PersitentObject ) // Quitar el elemento de la lista XXX
Comentario: XXX es el nombre de un atributo de la clase, en el caso de getXXX
y setXXX es un atributo simple, en el caso de addToXXX y removeFromXXX es
una colección de elementos.
23. 3. Yupp Framework: YMVC
• Yupp Model-View-Controller
–Implementación sólida del patrón MVC,
más herramientas necesarias.
–Tareas:
• Rutear los pedidos a controladores
• Ejecutar lógica de negocio
– Acceso a datos (YORM)
– Comunicación con otros sistemas (@todo)
– Proceso de información
• Determinar la salida
– Que salida, en que formato: HTML, XML, JSON, CSV
– Caso más frecuente: generar una página HTML para el usuario
• Generación de páginas
– Colaboración entre vista, layout, helpers y templates para generar una
página HTML maximizando la reutilización de código.
24. 3. Yupp Framework: YMVC
•Proceso de un pedido:
– URL: /blog/usuario/show?id=1
– Convención: /{component}/{controller}/{action}?params
25. 3. Yupp Framework: YMVC
• Filters: extraen parámetros del pedido.
• Custom mappings: determinan a que acción de que controlador hay que
invocar.
• Excecuter: es quien llama a la acción y controla su ejecución.
• Controller: es donde se define la lógica de las acciones.
• WebFlow: flujo definido en un controlador, permite especificar una
secuencia de acciones y páginas de forma sencilla.
• View model: es el contenedor de datos que se utiliza para que el controller
le pase datos a las vistas.
• View: definen como se debe mostrar la información al usuario, generando
una página HTML.
• Layout: define el aspecto general de un conjunto de vistas, sirve para
hacer lucir similar a varias vistas reutilizando este código común.
• Template: si un tipo de información se muestra de la misma forma en
varias vistas, ese código se pone en un template que se utiliza siempre
para mostrar la misma información, es un nivel más detallado de reuso de
código que el layout.
• Helpers: toda lógica de presentación que sea muy utilizada debe ir en un
helper, un helper equivale a una taglib de JSP, por ejemplo hay un helper
para generar links, la llamada a templates se hace mediante un helper,
para incluir CSS o Javascript se utiliza un helper, etc.
26. 3. Yupp Framework: YMVC
• Ejemplo: salvar una entrada luego de editada
– Nota: el código es análogo para salvar cualquier otra clase del
modelo da datos simplifica la generación automática de código
class EntradaBlogController extends YuppController {
...
public function saveAction()
{
$id = $this->params['id'];
$obj = EntradaBlog::get( $id );
$obj->setProperties( $this->params );
// Si no puede salvar, vuelve a edit y muestra errores de validación
if ( !$obj->save() )
{
$this->params['object'] = $obj;
return $this->render(quot;entradaBlog/editquot;, &$this->params);
}
// Modelo para vista show
$this->params['object'] = $obj;
return $this->render(quot;entradaBlog/showquot;, &$this->params);
}
...
}
27. Usuario de Yupp Framework
¡ADVERTENCIA!
Desarrollar con Yupp puede ser perjudicial para la salud ☺
28. 4. Resumen
• Buscar alivianar el proceso de desarrollo
considerando consejos de metodologías ágiles
(iteraciones, artefactos, comunicación) y utilizar
herramientas que se adapten al proceso para
automatizar tareas simples y repetitivas dejando
las “manos libres” para atender los verdaderos
problemas.
• Yupp Framework busca la agilidad en la
automatización de conversión de artefactos,
generación de prototipos, como solución para
desarrollo de aplicaciones web 2.0 de pequeño y
mediano porte, o como front-end de sistemas de
mayor porte desarrollados en con tecnologías.