Un Framework Para El Desarrollo De Aplicaciones Complejas Basadas En Web Autores
Total Page:16
File Type:pdf, Size:1020Kb
Título: Un framework para el desarrollo de aplicaciones complejas basadas en Web Autores: Alejandro Siri y Mariano Montone Director: Alicia Diaz Codirector: Alejandro Fernandez Carrera: Licenciatura en Informática La introducción de la Web como plataforma para el desarrollo de aplicaciones complejas rompió con los moldes y prácticas existentes e introdujo nuevos problemas y complicaciones. Existen muchos Frameworks y Librerías que abarcan estos problemas desde diversos ángulos, y proveen soluciones para algunos ellos. El desarrollador se ve obligado entonces a elegir un conjunto de estos Frameworks y Librerías, intentar solucionar la mayor cantidad de problemas posibles, e integrarlos para que funcionen en conjunto. Esta tesis describe tales problemas, separándolos en las 3 partes de la arquitectura MVC y luego, basándose en dos conceptos principales, que son la Composicionalidad y la Programación Declarativa, define un Framework que provee una solución a todos estos problemas al mismo tiempo, de manera integrada. El Framework es luego implementado en PHP, junto con las múltiples librerías que utiliza, y utilizado para resolver un problema del mundo real. Framework, Desarrollo, Web, Ajax, Comet, Componentes, La programación declarativa y la composición fueron ejes Templates, MVC, MVP, Composicionalidad, Programación fundamentales en el diseño de un Framework integrado y Declarativa completo. El Framework diseñado e implementado es usable y performante. Los problemas del desarrollo web pueden ser solucionados y abstraídos, permitiendo al desarollador enfocarse en el problema real a resolver. Investigación de los problemas recurrentes de las Algunas de las mejoras que se pueden hacer sobre el aplicaciones web. framework son: Investigación del estado del arte. Diseño de un Framework para resolver estos problemas. • Agregar “Value Expressions” Implementación del Framework y de librerías • Realizar un Testing Automático completo complementarias. • Permitir Múltiples Bases de Datos Implementación de una aplicación basada en el • Implementar Integración con Librerías existentes Framework para una tercera parte. • Implementar un mecanismo de Continuaciones • Diseñar y Desarrollar Plantillas avanzadas • Migrar el código a PHP 5.3 Febrero de 2012 Un framework para el desarrollo de aplicaciones complejas basadas en Web Alejandro Siri Mariano Montone ´Indice general ´Indice de figuras 3 ´Indice de cuadros 4 ´Indice de snippets 5 1. Introducci´on 9 2. Los problemas de las Aplicaciones Web 11 2.1. MVC en la Web ............................ 11 2.2. El Ejemplo: eMarket ......................... 12 2.3. Los problemas ............................. 14 3. Enfoques Metodol´ogicos 21 3.1. Acerca de la composicionalidad ................... 21 3.2. Programaci´ondeclarativa ...................... 22 4. Estado del arte 28 4.1. Smalltalk: Seaside + GLORP .................... 28 4.2. Ruby on Rails ............................. 31 4.3. Php: Symfony ............................. 36 4.4. Java: Hibernate + JSF + Seam ................... 40 5. Un framework para enfrentarlos a todos 47 5.1. Modelo ................................ 47 5.2. Controlador .............................. 56 5.3. Vista .................................. 63 6. PHP como lenguaje de implementaci´on 77 6.1. Multiple Dispatching ......................... 78 6.2. Referencias D´ebiles .......................... 80 6.3. PHPCC ................................ 82 6.4. Chequeo de Tipos .......................... 83 6.5. Macros ................................. 86 6.6. Mixins ................................. 87 6.7. Compilaci´on .............................. 89 6.8. COMET ................................ 90 6.9. Variables Din´amicas ......................... 91 6.10. Configuraci´on ............................. 95 7. Caso de ´exito:Intranet 97 7.1. Modelo ................................ 98 7.2. Controlador ..............................101 7.3. Vista ..................................107 2 ´INDICE GENERAL ´INDICE GENERAL 7.4. Conclusi´on . .............................108 8. Conclusi´ony Trabajo a Futuro 109 8.1. Conclusi´on ..............................109 8.2. Trabajo a Futuro . 110 Glosario 113 Bibliograf´ıa 113 ´Indice alfab´etico 116 3 3 ´Indice de figuras 2.1. Arquitectura Modelo-Vista-Controlador . 11 2.2. El MVC en la Web .......................... 13 2.3. Diagrama UML del ejemplo de eMarket . 14 3.1. Estado del men´u\Cortar" bajo el paradigma imperativo . 23 3.2. Estado del men´u\Cortar" bajo el paradigma declarativo . 24 3.3. Dependencias entre objetos con estados . 25 3.4. Actualizaci´onimperativa ....................... 25 3.5. Actualizaci´ondeclarativa ...................... 26 3.6. Composici´onde estados ....................... 26 3.7. Composici´onde estados imperativa . 27 3.8. Composici´onde estados declarativa . 27 5.1. Kusala - Pantalla de administraci´ondel sistema . 54 5.2. Kusala - Pantalla de diferencias de la base de datos . 55 5.3. Arquitectura Modelo-Vista-Presentador . 61 5.4. Diferencias entre MVC y MVP ................... 61 5.5. Hilo de componentes ......................... 63 5.6. Motor de plantillas \pull" ...................... 66 5.7. Motor de plantillas \push" ...................... 67 6.1. Representaci´ongr´aficade un registro de activaci´on . 91 6.2. Extensi´onde variables de lenguajes de programaci´on . 91 6.3. Extensi´onde variables din´amicas . 92 6.4. B´usquedadel valor de una variable din´amica . 93 6.5. B´usquedauna variable de hilo de componente . 94 7.1. Pantalla de Login ........................... 98 7.2. UML del modelo de Agenda ..................... 98 7.3. Listado de Agenda . 101 7.4. Transacci´onactiva . 104 4 ´Indice de cuadros 5.1. Comparaci´onde soluciones a la administraci´onde objetos . 56 5.2. Comparaci´onde soluciones al problema de edici´on . 63 5.3. Comparaci´onde soluciones al problema de la presentaci´on . 67 6.1. Tipos de variables .......................... 92 5 Snippets 4.1. Mapping en Glorp .......................... 29 4.2. Query en Glorp ............................ 29 4.3. Vista en Seaside ........................... 30 4.4. Rails - Clases Author y Product . 31 4.5. Rails - Tablas author y product ................... 32 4.6. Rails - Actualizaci´onde datos .................... 32 4.7. Rails - Consulta ............................ 32 4.8. Rails - Archivos del Scaffolding ................... 33 4.9. Rails - Controller de listado ..................... 33 4.10. Rails - Controller de actualizaci´on . 34 4.11. Rails - Vista de listado de productos . 35 4.12. Symfony - Definici´ondel modelo . 37 4.13. Symfony - Tablas generadas ..................... 37 4.14. Symfony - Clases generadas ..................... 37 4.15. Symfony - Consulta en DQL ..................... 38 4.16. Symfony - Controller para listado . 38 4.17. Java - Definici´ondel modelo - Author . 41 4.18. Java - Definici´ondel modelo - Product . 42 4.19. Java - Actualizaci´ondel modelo ................... 43 4.20. Java - Consulta en HQL ....................... 43 4.21. Java - Bean de Author ........................ 44 4.22. Java - Interface de AuthorManager . 45 4.23. Java - Bean de lista de Author ................... 45 4.24. Java - Vista de Lista de Autores . 46 5.1. Kusala- Declaraci´onde la clase Author . 47 5.2. Kusala - Guardado y recuperaci´onde objetos . 48 5.3. Kusala - Persistencia por Alcance . 49 5.4. Kusala - Ejemplo de OQL ..................... 49 5.5. Kusala - Uso de OQL dentro del programa . 49 5.6. Kusala - Gram´aticade OQL .................... 50 5.7. Kusala - Recuperaci´onde un error de transacci´on . 52 5.8. Kusala - Consulta a una colecci´onmodificada . 53 5.9. Kusala - Llamada desde controlador . 57 5.10. Kusala - Composici´onde componentes . 58 5.11. Kusala -Actualizaci´onde datos de un controlador . 59 5.12. Vista en Seaside ........................... 68 5.13. Kusala - Configuraci´onde la aplicaci´on- AJAX . 70 5.14. Kusala - Template .......................... 70 5.15. Kusala - Template .......................... 71 5.16. Kusala - Subtemplate para un hijo . 71 5.17. Kusala - Subtemplate para una clase . 72 5.18. Kusala - Elementos de una lista . 72 5.19. Kusala - Template con Template Method . 73 5.20. Kusala - Template para un Producto . 73 6 SNIPPETS SNIPPETS 5.21. Kusala - Template para un Autor y sus productos . 74 5.22. Kusala - Template para un Producto y Autor . 75 6.1. Declaraci´onde M´ultipleDispatching . 78 6.2. Declaraci´onde Context Dispatching . 79 6.3. Llamado de Context Dispatching . 79 6.4. Overriding por Context Dispatching . 80 6.5. Uso de WeakReferences ....................... 81 6.6. Consulta en OQL ........................... 82 6.7. Resultado de consulta en OQL ................... 82 6.8. Invocaci´onde PHPCC ........................ 83 6.9. Uso de Typechecking y assertions . 85 6.10. Definici´onde una macro ....................... 86 6.11. Definici´onde la macro defmdf .................... 87 6.12. Definici´onde un mixin ........................ 88 6.13. Ejemplo de configuraci´ondel sistema . 96 7.1. Definici´onde la clase ExternalPerson . 99 7.2. ExternalPerson visibles por un User . 100 7.3. Uso de File ..............................100 7.4. Context dispatching en Empresas . 102 7.5. Context dispatching en Empresas - Continuaci´on . 103 7.6. Editor para Empresas . 105 7.7. Permisos del Men´usuperior . 106 8.1. Sintaxis de ValueExpressions . 111 8.2. Sintaxis de ValueExpressions . 112 7 7 Abstract La introducci´onde la Web como plataforma para el desarrollo de aplicaciones complejas rompi´ocon los moldes y pr´acticasexisten- tes e introdujo