0
Desarrollo ágil
        con
Yupp PHP Framework


  A/C Pablo Pazos Gutierrez
         JIIO 2008
Agenda
• Desarrollo ágil
  – Ideas
• Frameworks (artefactos de software)
  – Definición y objetivos
  – Clasificación
  – ...
1. Desarrollo ágil (I)
Objetivos:
 – Utilizar herramientas que resuelvan problemas de programación
   simples y repetitivo...
1. Desarrollo ágil (II)

• Yupp PHP Framework aumenta el “nivel”
  de desarrollo que tiene PHP, mediante un
  framework li...
2. Frameworks (I)

• Según Wikipedia:
  – Un framework, en el desarrollo de software
    es una estructura de soporte defi...
2. Frameworks (II)
• Un framework no es una librería.
• Una librería apunta a reutilizar código y rutinas.
• Un framework ...
2. Frameworks (III)
• Clasificaciones de frameworks por principal
  funcionalidad:
  – Acceso a datos
     • Simplificar e...
2. Frameworks (IV)
• Ejemplo: framework vertical
  – Componentes desarrollados + Framework = Sistema
  – Yupp Framework es...
3. Yupp Framework (I)
• Yupp y su aporte al desarrollo ágil
 – Comenzar el proyecto con código funcionando
 – Tareas simpl...
3. Yupp Framework (II)
• Objetivo:
   – simplificar el desarrollo de sistemas web 2.0, y posibilitar
     el prototipado r...
3. Yupp Framework (III)
• ¿Qué ofrece concretamente Yupp
  Framework?
  – Prototipos: sirve para desarrollar prototipos
  ...
3. Yupp Framework (VI)
• Estado actual del proyecto (en dic-2008):
   – v0.1.5
   – Aprox. 50 clases y 10 KLOC
• ¿Por qué ...
3. Yupp Framework (V)
Futuro:
 – Automatizar el procesamiento de artefactos de análisis/diseño: casos de uso y modelos
   ...
3. Yupp Framework (VI)
• Generación de flujos de páginas funcionales =
  cliente contento + detección temprana en errores
...
3. Yupp Framework (VII)
• 2 componentes principales:
  – YORM: encargada de la definición y persistencia
    de los datos,...
3. Yupp Framework: YORM
•   YORM: Yupp Object-Relational Mapping
    –   Componente de acceso a datos y persistencia
    –...
3. Yupp Framework: YORM

Tipos de links y opciones de mapeo de
    herencia soportados por YORM.
3. Yupp Framework: YORM

Ejemplo: modelo de datos para sistema de blog
3. Yupp Framework: YORM
• Tablas generadas automáticamente a
  partir de la implementación del modelo
  de datos (ejemplo ...
3. Yupp Framework: YORM
• Fuentes de datos remotas: futuro
  – Integración con otros sistemas
  – Yupp Framework como fron...
3. Yupp Framework: YORM
• YORM API:
  – Manejo de la base:
     •   static get(id:Integer) : PersistentObject // Cargar un...
3. Yupp Framework: YORM
• Definición de una clase “Usuario” del modelo de datos
     class Usuario extends PersistentObjec...
3. Yupp Framework: YMVC
• Yupp Model-View-Controller
  –Implementación sólida del patrón MVC,
   más herramientas necesari...
3. Yupp Framework: YMVC
•Proceso de un pedido:
 – URL: /blog/usuario/show?id=1
 – Convención: /{component}/{controller}/{a...
3. Yupp Framework: YMVC
•   Filters: extraen parámetros del pedido.
•   Custom mappings: determinan a que acción de que co...
3. Yupp Framework: YMVC
• Ejemplo: salvar una entrada luego de editada
   – Nota: el código es análogo para salvar cualqui...
Usuario de Yupp Framework
                 ¡ADVERTENCIA!




 Desarrollar con Yupp puede ser perjudicial para la salud ☺
4. Resumen
• Buscar alivianar el proceso de desarrollo
  considerando consejos de metodologías ágiles
  (iteraciones, arte...
¿Preguntas?

           A/C Pablo Pazos Gutierrez
                pablo.swp@gmail.com

              Yupp PHP Framework
  ...
Upcoming SlideShare
Loading in...5
×

Yupp PHP Framework

2,788

Published on

Presentación de Yupp PHP Framework en las JIIO 2008

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,788
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
108
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Yupp PHP Framework"

  1. 1. Desarrollo ágil con Yupp PHP Framework A/C Pablo Pazos Gutierrez JIIO 2008
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 17. 3. Yupp Framework: YORM Tipos de links y opciones de mapeo de herencia soportados por YORM.
  18. 18. 3. Yupp Framework: YORM Ejemplo: modelo de datos para sistema de blog
  19. 19. 3. Yupp Framework: YORM • Tablas generadas automáticamente a partir de la implementación del modelo de datos (ejemplo del blog)
  20. 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. 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.
  22. 22. 3. Yupp Framework: YORM • Definición de una clase “Usuario” del modelo de datos class Usuario extends PersistentObject { function __construct() { $this->withTable = quot;usuariosquot;; $this->addAttribute(quot;nombrequot;, Datatypes :: TEXT); $this->addAttribute(quot;emailquot;, Datatypes :: TEXT); $this->addAttribute(quot;clavequot;, Datatypes :: TEXT); $this->addAttribute(quot;edadquot;, Datatypes :: INT_NUMBER); $this->addAttribute(quot;fechaNacimientoquot;, Datatypes :: DATE); $this->addHasMany(quot;comentariosquot;, Comentario); $this->addHasMany(quot;entradasquot;, EntradaBlog); $this->constraints = array ( quot;nombrequot; => array ( Constraint :: minLength(1), Constraint :: maxLength(30), Constraint :: blank(false) ), quot;clavequot; => array( Constraint :: minLength(5) ), quot;edadquot; => array( Constraint :: between(10, 100) ), quot;emailquot; => array( Constraint :: email() ) ); } }
  23. 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. 24. 3. Yupp Framework: YMVC •Proceso de un pedido: – URL: /blog/usuario/show?id=1 – Convención: /{component}/{controller}/{action}?params
  25. 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. 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. 27. Usuario de Yupp Framework ¡ADVERTENCIA! Desarrollar con Yupp puede ser perjudicial para la salud ☺
  28. 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.
  29. 29. ¿Preguntas? A/C Pablo Pazos Gutierrez pablo.swp@gmail.com Yupp PHP Framework http://groups.google.com/group/yuppframeworkphp http://yuppframework.blogspot.com http://www.simplewebportal.net/yupp_framework_php_doc/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×