yupp php framework

29
Desarrollo ágil con Yupp PHP Framework A/C Pablo Pazos Gutierrez JIIO 2008

Upload: pablo-pazos

Post on 26-May-2015

2.821 views

Category:

Technology


7 download

DESCRIPTION

Presentación de Yupp PHP Framework en las JIIO 2008

TRANSCRIPT

Page 1: Yupp PHP Framework

Desarrollo ágil con

Yupp PHP Framework

A/C Pablo Pazos GutierrezJIIO 2008

Page 2: Yupp PHP Framework

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

Page 3: Yupp PHP Framework

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.

Page 4: Yupp PHP Framework

• 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.

1. Desarrollo ágil (II)

Page 5: Yupp PHP Framework

• 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

2. Frameworks (I)

Page 6: Yupp PHP Framework

• 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.

2. Frameworks (II)

Page 7: Yupp PHP Framework

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)

Page 8: Yupp PHP Framework

• 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.

2. Frameworks (IV)

Page 9: Yupp PHP Framework

• 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....

3. Yupp Framework (I)

Page 10: Yupp PHP Framework

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.

Page 11: Yupp PHP Framework

• ¿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.

3. Yupp Framework (III)

Page 12: Yupp PHP Framework

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)

Page 13: Yupp PHP Framework

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)

Page 14: Yupp PHP Framework

• Generación de flujos de páginas funcionales = cliente contento + detección temprana en errores de requerimientos

3. Yupp Framework (VI)

El cliente ve a la interfaz de usuario como todo el sistemaLa interfaz de usuario funcionando en etapas tempranas del proyecto agrega:

Visibilidad sobre el avance (para el cliente)Posibilidad de detectar problemas en requerimientosPosibilidad de detectar requerimientos ocultosAporta 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.

Page 15: Yupp PHP Framework

• 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).

3. Yupp Framework (VII)

Page 16: Yupp PHP Framework

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.

Page 17: Yupp PHP Framework

Tipos de links y opciones de mapeo de herencia soportados por YORM.

3. Yupp Framework: YORM

Page 18: Yupp PHP Framework

Ejemplo: modelo de datos para sistema de blog

3. Yupp Framework: YORM

Page 19: Yupp PHP Framework

• Tablas generadas automáticamente a partir de la implementación del modelo de datos (ejemplo del blog)

3. Yupp Framework: YORM

Page 20: Yupp PHP Framework

• 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)

3. Yupp Framework: YORM

Page 21: Yupp PHP Framework

• 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

3. Yupp Framework: YORM

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.

Page 22: Yupp PHP Framework

• Definición de una clase “Usuario” del modelo de datosclass Usuario extends PersistentObject{

function __construct(){

$this->withTable = "usuarios";$this->addAttribute("nombre", Datatypes :: TEXT);$this->addAttribute("email", Datatypes :: TEXT);$this->addAttribute("clave", Datatypes :: TEXT);$this->addAttribute("edad", Datatypes :: INT_NUMBER);$this->addAttribute("fechaNacimiento", Datatypes :: DATE);$this->addHasMany("comentarios", Comentario);$this->addHasMany("entradas", EntradaBlog);$this->constraints = array (

"nombre" => array (Constraint :: minLength(1),Constraint :: maxLength(30),Constraint :: blank(false)

),"clave" => array( Constraint :: minLength(5) ),"edad" => array( Constraint :: between(10, 100) ),"email" => array( Constraint :: email() )

);}

}

3. Yupp Framework: YORM

Page 23: Yupp PHP Framework

• 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.

3. Yupp Framework: YMVC

Page 24: Yupp PHP Framework

•Proceso de un pedido:– URL: /blog/usuario/show?id=1– Convención: /{component}/{controller}/{action}?params

3. Yupp Framework: YMVC

Page 25: Yupp PHP Framework

• 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.

3. Yupp Framework: YMVC

Page 26: Yupp PHP Framework

• 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ódigoclass 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ónif ( !$obj->save() ){

$this->params['object'] = $obj;return $this->render("entradaBlog/edit", &$this->params);

}

// Modelo para vista show$this->params['object'] = $obj;return $this->render("entradaBlog/show", &$this->params);

}...

}

3. Yupp Framework: YMVC

Page 27: Yupp PHP Framework

Usuario de Yupp Framework¡ADVERTENCIA!

Desarrollar con Yupp puede ser perjudicial para la salud ☺

Page 28: Yupp PHP Framework

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.

Page 29: Yupp PHP Framework

¿Preguntas?

A/C Pablo Pazos [email protected]

Yupp PHP Frameworkhttp://groups.google.com/group/yuppframeworkphp

http://yuppframework.blogspot.comhttp://www.simplewebportal.net/yupp_framework_php_doc/