Padrões de Projeto para Sistemas Web Misael Santos e Rossana Andrade [email protected] Universidade Federal do Ceará – Jan/2003 Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 1 Agenda Introdução – Servlets Padrões – Web Interceptor – Web Handlers – Web Compiler – Super Component Referências Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 2 Servlets Servidor Web Web Container http://www.ufc.br Servlet Cliente Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 3 Servlets Características – Classes Java – Boa Performance – Suporta Requisições Concorrentes – Simples e Extensível Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 4 Servlets Ciclo de Vida – Inicialização – Serviço – Finalização Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 5 Servlets Carregado em memória init() Em Inicialização new() Disponível service() destroy() Em destruição Copyright © 2003 Misael Santos e Rossana Andrade Não carregado DC - UFC 6 Agenda Introdução – Servlets Padrões – Web Interceptor – Web Handlers – Web Compiler – Super Component Referências Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 7 Web Interceptor Contexto: Página de Crédito Página de Débito <<submit>> ComponenteCredito Copyright © 2003 Misael Santos e Rossana Andrade <<submit>> ComponenteDebito DC - UFC 8 Web Interceptor Problema: – Como evitar a duplicação de código no início das operações que executam as requisições em sistemas Web estruturados de forma modular? Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 9 Web Interceptor Página de Crédito Página de Débito <<submit>> <<submit>> Interceptor <<redirect>> ComponenteCredito Copyright © 2003 Misael Santos e Rossana Andrade <<redirect>> ComponenteDebito DC - UFC 10 Web Interceptor InterceptorMain Cliente Web <<submit>> <<redirect>> Interceptor1 Interceptor2 <<redirect>> <<redirect>> Componente Credito Componente Debito Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC Componente Transferencia 11 Web Interceptor Consequências: – Único ponto de acesso – Evita repetição desnecessária de código – Diminui o acoplamento – Diminui a performance Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 12 Web Interceptor Implementação – …extends HttpServlet – TIpos de Associação: Associação Estática Associação Automática Associação Dinâmica Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 13 Web Interceptor Usos Conhecidos – Framework Web Handlers. – Portal Encontre & Compre: sistema de consultas dos assinantes da Listel. – FiS (Financial Services): migração J2EE da HiperCard. – Central de Regulação do SUS: desenvolvido pelo CESAR. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 14 Web Interceptor Padrões Relacionados: – Facade Customização do Facade para sistemas Web. – Front Controller Possui lógica para decidir que componente deve receber a requisição. – Intercepting Filter Acoplados aos Servlets para realizar um préprocessamento. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 15 Agenda Introdução – Servlets Padrões – Web Interceptor – Web Handlers – Web Compiler – Super Component Referências Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 16 Web Handlers Página de Crédito Contexto Página de Login Menu de Movimentações Links estáticos de HTML Página de Débito Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 17 Web Handlers Contexto Menu de Atualização Outras Páginas... Página de Login 1 Página de Crédito Página de Login 2 Menu de Movimentações Página de Débito Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 18 Web Handlers Problema: – Evitar a duplicação de código e complexidade na estruturação de sistemas Web com relacionamento M:N entre a apresentação e o processamento. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 19 Web Handlers Solução: – Handlers de Apresentação – Handlers de Processamento – Controlador de Handlers Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 20 Web Handlers <<Handler de Processamento>> HP_Login <<Handler de Apresentação>> HA_MenuMovimentacoes processar(ServletRequest, ServletResponse) apresentar(ServletRequest, ServletResponse) Login a partir da Página de Login 2 <<Handler de Processamento>> HP_Login <<Handler de Apresentação>> HA_MenuAtualizacao processar(ServletRequest, ServletResponse) apresentar(ServletRequest, ServletResponse) Login a partir da Página de Login 1 Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 21 Web Handlers <<Handler de Processamento>> HP_Credito <<Handler de Apresentação>> HA_MenuMovimentacoes processar(ServletRequest, ServletResponse) apresentar(ServletRequest, ServletResponse) Execução da operação de Crédito <<Handler de Processamento>> HP_Debito <<Handler de Apresentação>> HA_MenuMovimentacoes processar(ServletRequest, ServletResponse) apresentar(ServletRequest, ServletResponse) Execução da operação de Débito Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 22 Web Handlers Consequências – Maior reuso de código – Flexibilidade na composição – Mudanças na apresentação não causam efeito no processamento – Facilita a implementação de sistemas que requerem diferentes formatos de saída – Aumenta o número de classes – Complexidade na implementação Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 23 Web Handlers Usos Conhecidos – Portal Encontre & Compre: sistema de consultas dos assinantes da Listel. – Sistema de Fomento Lattes – Prospectar: Sistema de prospecção tecnológica do Governo Federal. – Web2Billing: consulta e pagamento de faturas online – FiS (Financial Services): migração J2EE da HiperCard. – Fep (Call Center no FEP): da HiperCard. – Gin (Sistema de Gestão Interna): sistema de apoio a gestão interna do CESAR. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 24 Web Handlers Padrões Relacionados – Na construção dos handlers de apresentação pode ser usado o padrão Web Compiler. – O Facade pode ser usado para agrupar as regras de negócio em um único ponto. – O Controlado de Handlers deve implemetar o padrão Web Interceptor. – O padrão Super Component pode ser usado na implementação dos Handlers de apresentação e de processamento. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 25 Agenda Introdução – Servlets Padrões – Web Interceptor – Web Handlers – Web Compiler – Super Component Referências Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 26 Web Compiler Contexto: ... mensagem = consultarMensagem(); texto = “<HTML><HEAD>Exemplo 1</HEAD><BODY>”; texto = texto + mensagem; texto = texto + “</BODY></HTML>”; out.println(texto); ... Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 27 Web Compiler Contexto: – – – – Impossibilidade de ver o Layout Designers X Engenheiros de Software Recompilação a cada modificação no Layout Dificulta a legibilidade do código Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 28 Web Compiler Problema: – Como desenvolver uma aplicação Web de forma a evitar que o layout das páginas HTML esteja misturado com a lógica de execução das operações do sistema? Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 29 Web Compiler Passagem de dados dinâmicos Solução: Regras de Negócio Componente Web Web Compiler Recupera Template Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 30 Web Compiler Cliente Web : Componente Web : Web Compiler template.txt : Template request executar() leitura processar() resposta resposta Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 31 Web Compiler Consequências – Separação completa entre o código de apresentação e o de processamento. – Visualização do Layout independente da execução do sistema. – Alterações no Layout não implicam em recompilação. – Um pequeno atraso no processamento da requisição. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 32 Web Compiler Usos Conhecidos – FreeMarker – WebMacro – Velocity – API do CESAR. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 33 Web Compiler Padrões Relacionados – Skin Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 34 Agenda Introdução – Servlets Padrões – Web Interceptor – Web Handlers – Web Compiler – Super Component Referências Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 35 Super Component Contexto: – Ciclo de vida bem definido: Inicialização, serviço e destruição - ex: Servlets, JSPs, Web Handlers. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 36 Super Component Contexto: – inicialização: conexões com bancos de dados; abertura e leitura de arquivos; criação ou instanciação de objetos; – destruição liberação dos recursos alocados durante a inicialização. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 37 Super Component Problema: – Como evitar a duplicação de código de inicialização e destruição nos diversos componentes Web de um sistema? Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 38 Super Component Solução: SuperComponent init () destroy () Component service () Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 39 Super Component Consequências: – Código mais limpo. – Evita a duplicação de código. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 40 Super Component Usos Conhecidos – Sistema Wide: Web Information of Development – Portal Encontre & Compre: sistema de consultas dos assinantes da Listel. – FiS (Financial Services): migração J2EE da HiperCard. – Central de Regulação do SUS: desenvolvido pelo CESAR. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 41 Referências [1] Gibeon Soares de Aquino Júnior, “Desenvolvimento de Sistemas Web em Java”, Universidade Federal de Pernambuco, 2002. [2] Andrade, R.M.C, “Capture, Reuse, and Validation of Requirements and Analysis Patterns for Mobile Systems”, University of Ottawa, Ottawa, Canadá, 2001. [3] Deepak Alur, John Crupi and Dan Malks “Core J2EE Patterns Best Practices and Design Strategies”. Prentice Hall, March 2001. [4] Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides. “Design Patterns Elements of Reusable Object Oriented Software”. Addison Wesley, 1994. Copyright © 2003 Misael Santos e Rossana Andrade DC - UFC 42