== Introducción == Explicación de que es Toba en palabras: es un ambiente de desarrollo web creado por el SIU... === Agenda === Una diapo mostrando el programa de la presentacion, el titulo de esta diapo se repite en el comienzo de cada capitulo para contextualizar un poco. === Contexto: SIU === * Tipo de problemas a resolver: * Sistemas transaccionales de gestion: Logica de negocio compleja. Destinados a universidades. Eje: Robustez, mantenibilidad, configurables. No deben haber limitaciones sobre la construccion * Sistemas medianos y chicos, para articular circuitos administrativos simples. Eje: Tienen que resolverse rapido y de manera coherente. * Equipo de trabajo * Madurez a nivel negocio. * Ya existia el concepto de infraestructura. * No hay mucha experiencia WEB, si mucha experiencia de escritorio. * Equipo distribuido geograficamente * Estilo SIU. * Politica del siu respecto de sus desarrollos * Las universidades son socios. * No limitarse a conseguir recursos (lengujae) Conclusion: - Frameworks contemporaneos (2003) orientados al CRUD o al CMS (Hacen agua cuando la interface y el modelo de datos subyacente difieren.) - No se parte de un modelo ideal, se parte de necesidades concretas. === Objetivos === * Abstraer tecnologías web (no ser guru en css, javascript, html, server-side, base de datos, etc.) * Accesible con poco o sin capacitación (poder utilizar grandes cantidades de programadores junior, administradores, tecnicos de las unis...) * Posibilidad de desarrollar sistemas puntuales en pocas semanas. (RAD!, Hacer los ABMs en dos patadas.) * Utilizar tecnologías abiertas * Un buen balance entre flexibilidad y agilidad, algo que pueda acompañar el continuo crecimiento de los sistemas. * Poder concentrar los esfuerzos en 'negocios' complejos (menos cosas contextuales) === Nuestra solución === * Un ambiente gráfico de edición => Construcción basada en definición (WYSIWYG Web!) * Minimizar la programación (lo facil facil, lo muy dificil posible) * Stack completo open-source: Linux, Apache, Php, Postgres/Mysql (Hereda todas las ventajas de PHP5: muy sencillo (cualquier nivel de programación), ágil, fácil deployment, escala barato y sencillo.) * Trabajo grupal local o a distancia a través de herramientas y convenciones (el SIU tiene grupos distribuidos en distintas ciudades) * IDE Web pensada para desarrolladores e interfaz de línea de comandos para el deployment-mantenimiento de los sistemas. * Focalizado en sist. transaccionales (son los más dificiles, aunque los de presentación son los mas usuales) === Nuestra solución === * Creación de interfaces ricas en forma declarativa (HTML, JS, CSS, AJAX). * Separación en capas (~MVC por debajo cuerda). * Transparencia al problema Request/Response. * Posibilita el manejo de transacciones complejas (transacciones multi-etapa). * Muy buen grado de reutilización tanto de la definición de componentes como de programación (totalmente POO). * El resto de cosas tipicas de framework (Autorización, Autentificación, Validaciones, Logging, menus, etc.) === Toba hoy en el SIU === * Maduro y estable (~ 4 años de desarrollo y consumo, llegamos a la 1.0!). * API limpia y simple * Asegurada compatibilidad hacia atrás por largos períodos de tiempo * 20 librerías open-source (lgpl-apachebsd) o de dominio público utilizadas. * 14 Proyectos implementados (mismas calidades ext. e int.: arquitectura, look&feel, requisitos, forma de extensión, etc.) * Integración entre sistemas => oficina virtual * Cuantos programadores? === Arquitectura === * Editor: Ambiente web que edita metadatos (creado con la misma herramienta) * Comandos administrativos: Deployment, exportación, importación, tareas automatizadas. * Núcleo: Runtime que necesitan los proyectos en producción, interpreta los metadatos y tiene el API consumible === Núcleo === Con un gráfico * Basado componentes * Divididos en capas con distintas responsabilidades: Una operación se define en base a componentes. Estos cubren distintos aspectos de una operación, categorizándolos según su función: interface, control o persistencia. El comportamiento particular de los componentes es determinado por: * La definición usando el editor. * La extensión PHP del componente. * La extensión Javascript del componente. === Componentes de interface === * Consistencia visual y de comportamientos. * Interfaces ricas, comportamientos avanzados (ocultando complejidad de js, html y css (también AJAX), aunque sin perder flexibilidad) * Cross-browser === Control de control === * Mantiene el concepto de navegación en una operación, constituyendo distintas pantallas. * Contiene y controla otros componentes como cuadros, filtros, formularios o incluso otros ci. Permite escuchar eventos propios o de componentes contenidos y configurarlos, definiendo así el comportamiento de las operaciones. * Mantiene el estado de la operación a través de los distintos pedidos de página, utilizando el mecanismo de persistencia en sesión. * Determina el marco transaccional de la operación, procesando los cambios al final de una transacción lógica que atraviesa varios pedidos de página. === Negocio === Esto lo dejamos??? Este componente permite unificar la carga y entrega de datos y servicios a una jerarquía completa de componentes de interface (especialmente a los cis). Separar la carga y utilización de los datos (inicio y fin de una transacción de negocios) permite: * Lograr una máxima independencia entre la logica de pantalla y de la de negocio, * Tener un lugar centralizado para brindar servicios comunes a una jerarquia de componentes === Persistencia === * Solución tabular no ORM * Cargan un conjunto de datos relacionados * Mantienen en memoria los cambios realizados por el usuario a estos datos * Finalmente sincroniza con el medio de persistencia cuando sea solicitado. * Permite armar marcos transaccionales === Editor === Una diapo con un screenshot y explicando las partes del editor (los frames) == Demo del Ambiente == * Paseo (1.0.2): * Recorrer los contextos. * Significado de los paneles. * Ver la estructura completa del proyecto. * Pararse en una operacion. Ver la composicion. * Editar los componentes de una operacion. * Previsualizar. * Ver una operacion armada: tipos de componentes. * Creación de una operacion (aparece en el menu). * Creación de componentes. * Lectura de metadatos de la db para hacer DTs. * Lectura de DTs para hacer componentes visuales. * Extension de componentes. Editor PHP toba * Operaciones completas (0.9.1). * Para cada una: * Mostrar lo que hace * como esta compuesta * Dar una idea del encadenamiento subyacente entre componentes * Tipos a mostrar: * ABM simple. * ABM complejo. * Transaccion compleja, persistencia toba. * Transaccion compleja, persistencia ad-hoc.