Arquitectura de Proyectos de IT
Arquitectura de Presentación
Gastón Coco
Nicolás Passerini Jorge L García
¿Qué es Presentación?
Es lo que permite al usuario interactuar con el
Problemas
Su lógica puede ser muy compleja, más que la de
negocio a veces (muchas veces diría).
Casos de uso simples tener problemas de:
– Navegación
– Múltiples formas de ser invocados – Ingreso de datos (interfaz visual) – Mostrar resultados
Es muy difícil hacer algo bonito, que sea usable,
¿Por qué es tan complejo?
También hay problemas en el análisis
– Es compleja porque cuesta separar las cuestiones de
negocio de las visuales.
– Al pensar en las pantallas uno se aleja del concepto /
dominio / negocio.
– Distintos usuarios quieren hacer la misma tarea de
distintas formas
– Suele ser lo que más rápidamente cambia.
Cuesta encontrar buenas abstracciones.
– Encontrar abstracciones
Secuencia Típica de Presentación
Mostrar las distintas acciones a realizar.
Inicio de un caso de uso.
Ingreso de datos del usuario.
Validación de los datos ingresados.
Transformación de los datos del formato de
ingreso al formato de negocio.
Invocación de la lógica de negocio.
Transformación de los resultados.
Manejo y presentación de los errores.
Decisiones a Tomar
1. ¿Cómo distribuirlo? ¿Cliente liviano o pesado?
2. ¿Quién controla el flujo de la aplicación?
3. ¿Cómo se estructura la navegación?
4. ¿Cómo se maneja el estado conversacional?
5. ¿Cómo se relaciona con la lógica de dominio?
1- Distribución de la Lógica
¿Por qué?
– Muchos clientes = muchas máquinas – Los usuarios están en distintos lugares
¿Dónde está la lógica?
– Server side – Client side – Mix
1- Distribución de la Lógica (Cont.)
Interfaces de usuario – Línea de comando – Terminales – Cliente Servidor – Web – RIA2- Control de la Iniciativa
User Initiative
– Pedido-Respuesta – Orientado a Eventos
Application Initiative
– Usuario contesta preguntas – Wizard
– Alarmas y eventos disparados por la aplicación
Combinada
– Interactivo, Conversación – Continuation
3- Formas de Navegación
Pantallas y Formularios
– Stateless
– Terminal boba / Mainframe, Web Tradicional
Ventanas o Diálogos
– Stateful / Wizards
– Cliente – Servidor, RIA
Manipulación Directa
4- Estado conversacional
Cliente
En cada pedido
Servidor (Session)
Compartido
5- Integración con el dominio de la aplicación
Stateless – Servicios – Procesos Stateful – Eventos – Objetos6- ¿Dónde se integra la lógica?
Campo a campo
– Validaciones – Máscaras
– Pickers y otros controles más elaborados
Por formulario o pantalla
– Lo más utilizado
– Más cerca de la tecnología, a veces menos conceptual
Por caso de uso
4 Visiones
Orientado a la presentación
– RAD - Rapid Application Development
– Visual Basic
Orientado a datos
– Hibernate, Struts.
Orientado a servicios.
Otros Problemas (I)
Navegabilidad
Usabilidad
– Drag & Drop – Máscaras
– Eventos disparados por el server
Múltiples tareas simultáneas
Otros Problemas (II)
User Session Management
Internacionalización
Validación
Manejo de errores
– Cómo mostrarlos
Formas de desarrollar presentación
Visual
Programática
– Template – Componentes
Declarativa
Automática / Introspectiva
Ideas de Diseño
MVC – MMVC – MVP – Model 2
Morphic
MDP (Model Driven Presentation)
Clientes pesados tradicionales
AWT, Swing, SWT – Java
.Net Desktop - VB6
Delphi
Dolphin – Smalltalk
Web
tradicionales
PHP JSP / Servlets ASP Cold Fusion Perl Algunas herramientas Struts – Stripes Taglibs XSLWeb + Components
Tapestry
JSF
ASP .Net
Flujo Tradicional
Cliente Servidor
pedido de archivos, submit de formularios
HTMLs con javascript embebido, librerías de javascript, imágenes varias
Flujo RIA
Cliente Servidor
pedido de archivos,
pedido o envío de información
HTMLs simples, librerías de javascript, mapa de imágenes, información
Herramientas RIA
Javascript + DHTML Applets ActiveX AJAX FlashPlataformas RIA
XUL (XML + Javascript + Stylesheets)
Flex (Macromedia, MXML)
Lazslo
GWT
Active Widgets
MDP (Model Driven Presentation)
Naked Objects
Ruby on Rails
JRapid
Patrones de presentación
Front Controller
Application Controller
Use Case Object
– Unit Of Work
Filtros
Templates
View Helpers