JEE Design Patterns

4,895 views

Published on

Módulo 3 - JEE Design Patterns

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

No Downloads
Views
Total views
4,895
On SlideShare
0
From Embeds
0
Number of Embeds
31
Actions
Shares
0
Downloads
345
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

JEE Design Patterns

  1. 1. Lato Sensu em Sistemas Orientados a Objetos Módulo 3 Web JEE Design Patterns Monday, August 17, 2009
  2. 2. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Monday, August 17, 2009
  3. 3. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Agenda • Remote Proxy • Service Facade • Front Controller • Service Locator • Intercepting Filter • Business Delegate • View Helper • Service-to-Worker • Transfer Object • Dispatcher-to-View Monday, August 17, 2009
  4. 4. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Padrões JEE • Os padrões JEE foram baseados na experiência de anos de trabalho com a arquitetura JEE. • Padrão de Projeto X Padrão de Arquitetura. • Evoluem à medida que surgem mudanças na especificação e nas tecnologias relacionadas. Monday, August 17, 2009
  5. 5. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Padrões JEE Apresentação Negócio Integração Interception Filter Session Façade Data Access Object Front Controller Business Delegate Service Activator View Helper Data Transfer Object Composite View Data Transfer Object Assembler Service to Worker Composite Entity Dispatcher View Service Locator Fast Lane Reader Value List Handler http://www.corej2eepatterns.com Monday, August 17, 2009
  6. 6. Monday, August 17, 2009
  7. 7. http://java.sun.com/blueprints/patterns/catalog.html Monday, August 17, 2009
  8. 8. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Estrutura de apresentação de um padrão JEE • Nome • Contexto • Problema • Motivação • Solução - Estrutura - Estratégias • Conseqüências • Código Exemplo • Padrões Relacionados Monday, August 17, 2009
  9. 9. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Padrões de projeto JEE Benefícios • Aperfeiçoar o projeto de um sistema: - Reuso interno, evitam a 'reinvenção da roda'. - Facilidade de manutenção - Facilidade de evolução • Estabelecer um vocabulário comum. • Cria fronteiras, definindo um escopo para a solução de um problema. Monday, August 17, 2009
  10. 10. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Como usar um padrão de projeto? • Leia o padrão de projeto inteiro para ter uma visão geral. • Certifique-se que entendeu bem a estrutura do padrão. • Veja como implementar o padrão no Código de Exemplo. • Escolha nomes para os participantes de acordo com o contexto da aplicação. Monday, August 17, 2009
  11. 11. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Como não usar um padrão de projeto • Se existe uma maneira trivial para resolver um problema e um padrão de projeto, prefira a simplicidade. • Só use um padrão de projeto quando necessário - deve haver ganhos claros com o uso do padrão • Padrões de projeto indevidamente aplicados aumentam a complexidade do software sem necessidade. Monday, August 17, 2009
  12. 12. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Remote Proxy Monday, August 17, 2009
  13. 13. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto A B Monday, August 17, 2009
  14. 14. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema comunicação não trivial Monday, August 17, 2009
  15. 15. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema comunicação remota Monday, August 17, 2009
  16. 16. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema objeto ainda não existe ? Monday, August 17, 2009
  17. 17. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução A B’ B Proxy Monday, August 17, 2009
  18. 18. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Proxy Monday, August 17, 2009
  19. 19. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Proxy Monday, August 17, 2009
  20. 20. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Proxy ? Monday, August 17, 2009
  21. 21. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Stub ? Monday, August 17, 2009
  22. 22. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  23. 23. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Proxy Monday, August 17, 2009
  24. 24. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Sinônimos Surrogate Monday, August 17, 2009
  25. 25. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Motivação • O Proxy é: - Uma pessoa autorizada a atuar no lugar de outra pessoa (procurador). • Existem situações onde o cliente não quer ou não pode referenciar a um objeto diretamente, mas mesmo assim quer iteragir com o mesmo. • O proxy tem a mesma interface que o objeto alvo. • O proxy delega as requisições (Delegação). Monday, August 17, 2009
  26. 26. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Aplicabilidade • O padrão Proxy é aplicável sempre que há necessidade de uma referência mais versátil, ou sofisticada, do que um simples apontador para um objeto. Monday, August 17, 2009
  27. 27. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Estrutura Monday, August 17, 2009
  28. 28. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Conseqüências • Oculta o fato de que um objeto reside num espaço de endereçamento diferente. • Provê tarefas adicionais de organização quando um objeto é acessado. Monday, August 17, 2009
  29. 29. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Código de Exemplo public interface Subject { public Object operation(); } public class RealSubject implements Subject { public Object operation()‫{ ‏‬ return new Object(); } } Monday, August 17, 2009
  30. 30. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Código de Exemplo public class Proxy implements Subject { private RealSubject real; public Object operation()‫{‏‬ makeSomething(); return real.operation(); } private void makeSomething()‫{ ‏‬ } } Monday, August 17, 2009
  31. 31. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Usos Conhecidos • Objetos Distribuídos – RMI e EJB. • Image Proxy – Guardar o lugar da imagem sendo carregada. Monday, August 17, 2009
  32. 32. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Proxy Padrões de Projeto Relacionados • Adapter • Decorator Monday, August 17, 2009
  33. 33. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller Monday, August 17, 2009
  34. 34. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  35. 35. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  36. 36. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  37. 37. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009 ?
  38. 38. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  39. 39. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  40. 40. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Front Controller log, segurança, roteamento, exceções Monday, August 17, 2009
  41. 41. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller consequências • Controle centralizado • Melhora gerência sobre a segurança • Aumenta o potencial de reutilização Monday, August 17, 2009
  42. 42. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller estrutura Monday, August 17, 2009
  43. 43. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller • Participantes e Responsabilidades Monday, August 17, 2009
  44. 44. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller • Padrões Relacionados - View Helper - Intercepting Filter - Dispatcher View e Service to Worker Monday, August 17, 2009
  45. 45. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter Monday, August 17, 2009
  46. 46. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  47. 47. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  48. 48. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Intercepting Filter Monday, August 17, 2009
  49. 49. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Intercepting Filter log, segurança, compatibilidade Monday, August 17, 2009
  50. 50. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 ??????????????????????? == == ??????????????????????? Monday, August 17, 2009
  51. 51. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Pré e pós-processamento Monday, August 17, 2009
  52. 52. Monday, August 17, 2009
  53. 53. Monday, August 17, 2009
  54. 54. ? Monday, August 17, 2009
  55. 55. Monday, August 17, 2009
  56. 56. intercepting filter intercepting filter Monday, August 17, 2009
  57. 57. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Encadeamento filter chaining Monday, August 17, 2009
  58. 58. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter Estrutura Monday, August 17, 2009
  59. 59. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter Participantes e Responsabilidades Monday, August 17, 2009
  60. 60. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter Parte integrante da especificacão desde Servlets 2.3 Monday, August 17, 2009
  61. 61. public final class SimpleFilter implements Filter { private FilterConfig filterConfig = null; public void doFilter(ServletRequest req, ServletResponse res, FilterChain ch) throws IOException, ServletException { if (filterConfig == null)‫‏‬ throw new ServletException("FilterConfig not set before first request"); filterConfig.getServletContext().log("in SimpleFilter"); Object curVal = request.getAttribute("MsgOut"); if (curVal == null)‫‏‬ request.setAttribute("MsgOut", new String("SimpleFilter")); else request.setAttribute("MsgOut", (String) curVal + " :SimpleFilter"); chain.doFilter(request, response); filterConfig.getServletContext().log("Getting out of SimpleFilter"); } public void destroy(){ filterConfig = null; } public void init(FilterConfig filterConfig){ this.filterConfig = filterConfig; } } Monday, August 17, 2009
  62. 62. <filter> <filter-name>Simple Filter</filter-name> <filter-class>capitulo12.SimpleFilter</filter-class> </filter> <filter-mapping> <filter-name>Simple Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>Simple Filter 2</filter-name> <filter-class>capitulo12.SimpleFilter2</filter-class> </filter> <filter> <filter-name>Audit Filter</filter-name> <filter-class>capitulo12.AuditFilter</filter-class> </filter> <filter-mapping> <filter-name>Simple Filter 2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>Audit Filter</filter-name> <servlet-name>MyServlet</servlet-name> </filter-mapping> Monday, August 17, 2009
  63. 63. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter • Conseqüências - Centraliza o controle com baixo acoplamento. - Aumenta o potencial de reuso. - Configuração declarativa e flexível. - Compartilhamento de informações entre filtros pode ser ineficiente. Monday, August 17, 2009
  64. 64. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Intercepting Filter • Padrões Relacionados - Pipes and Filter [POSA] - Front Controller - Decorator [GoF] Monday, August 17, 2009
  65. 65. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper Monday, August 17, 2009
  66. 66. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  67. 67. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  68. 68. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  69. 69. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema // conecte-se ao banco de dados via JDBC // recupere do banco o nome do usuário logado // recupere do banco a data do último acesso // desenhe uma tabela linda na tela // apresente os dados nesta tabela index.jsp Monday, August 17, 2009
  70. 70. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema // conecte-se ao banco de dados via JDBC // recupere do banco o nome do usuário logado // recupere do banco a data do último acesso // desenhe uma tabela linda na tela // apresente os dados nesta tabela index.jsp Monday, August 17, 2009
  71. 71. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema // conecte-se ao banco de dados via JDBC // recupere do banco o nome do usuário logado // recupere do banco a data do último acesso // desenhe uma tabela linda na tela // apresente os dados nesta tabela index.jsp Monday, August 17, 2009
  72. 72. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009 + + index.jsp
  73. 73. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Problema - Mudanças na camada de apresentação ocorrem com freqüência e são difíceis de serem implementadas e mantidas. - O problema ocorre quando a lógica de acesso a dados e a lógica de apresentação estão acopladas: Menor flexibilidade Dificuldade de reuso Reduz a modularidade Web Designers X Desenvolvedores Monday, August 17, 2009
  74. 74. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Motivação - Inserir lógica de negócio na 'visão' viabiliza reaproveitamento de código por meio de uma abordagem 'copy-paste'. Surgem problemas de manutenção. Código duplicado gera bugs. - É importante separar o papel do desenvolvedor de software e do Web Designer. Melhora a qualidade e a produtividade. Monday, August 17, 2009
  75. 75. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução index.jsp Monday, August 17, 2009 + + JavaBean, CustomTag, Servlet
  76. 76. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução View Helper index.jsp Monday, August 17, 2009 + + JavaBean, CustomTag, Servlet
  77. 77. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução View Helper index.jsp Monday, August 17, 2009 + + JavaBean, CustomTag, Servlet
  78. 78. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Solução - A visão mantém apenas código de formatação, delegando responsabilidades de processamento para helper classes, implementadas como JavaBeans ou tags customizadas. - Os helpers armazenam uma visão intermediária dos dados e servem como classes/componentes adaptadores. - Um sinal → excesso de scriptlets em uma página JSP. Monday, August 17, 2009
  79. 79. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Controller Model + + + index.jsp ViewHelper Monday, August 17, 2009
  80. 80. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper Estrutura Monday, August 17, 2009
  81. 81. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper Participantes e Responsabilidades Monday, August 17, 2009
  82. 82. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Conseqüências - Facilita a manutenção - Aumenta o potencial de reuso - Promove a separação de papéis Monday, August 17, 2009
  83. 83. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 View Helper • Padrões Relacionados - Business Delegate - Front Controller - Dispatcher View e Service to Worker Monday, August 17, 2009
  84. 84. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object Data Transfer Object Value Object Monday, August 17, 2009
  85. 85. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  86. 86. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  87. 87. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  88. 88. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema ? Monday, August 17, 2009
  89. 89. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  90. 90. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  91. 91. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  92. 92. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  93. 93. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  94. 94. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  95. 95. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução ! Monday, August 17, 2009
  96. 96. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  97. 97. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  98. 98. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  99. 99. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  100. 100. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  101. 101. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Monday, August 17, 2009
  102. 102. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object Estrutura Monday, August 17, 2009
  103. 103. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object Participantes e Responsabilidades Monday, August 17, 2009
  104. 104. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object Conseqüências • Benefícios - Simplifica o componente de negócio e a interface remota. - Transfere mais dados em menos chamadas remotas. - Reduz o trafego na rede. - Reduz a duplicação do código. • Cuidados - Introdução de objetos obsoletos. - Acesso a transações concorrentes Monday, August 17, 2009
  105. 105. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Transfer Object • Padrões Relacionados - Session Facade - Transfer Object Assembler - Value List Handler - Composite Entity Monday, August 17, 2009
  106. 106. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Facade Monday, August 17, 2009
  107. 107. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  108. 108. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  109. 109. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Problema - Forte acoplamento, que leva a uma dependência direta entre clientes e objetos de negócio. - Grande quantidade de invocações de métodos remotos entre cliente e servidor, levando a problemas de desempenho da rede. - Ausência de uma estratégia uniforme de acesso para o cliente, expondo objetos de negócio à possibilidade de serem usados de forma incorreta. Monday, August 17, 2009
  110. 110. Monday, August 17, 2009
  111. 111. Solução Session Facade Monday, August 17, 2009
  112. 112. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Session Facade Monday, August 17, 2009
  113. 113. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Solução - Utilizar um Session Bean como 'fachada' para encapsular a complexidade das interações entre os objetos de negócio que participam de um serviço. - Um Session Facade gerencia os objetos de negócio e provê um serviço uniforme e de alta granularidade aos clientes. - Quando usado com o Business Delegate, geralmente há um relacionamento One-to-One entre eles. Monday, August 17, 2009
  114. 114. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Estrutura Monday, August 17, 2009
  115. 115. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Participantes e Responsabilidades Monday, August 17, 2009
  116. 116. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Session Facade • Padrões Relacionados - Facade [GoF] - Service Locator - Business Delegate Monday, August 17, 2009
  117. 117. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator Monday, August 17, 2009
  118. 118. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  119. 119. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI Monday, August 17, 2009
  120. 120. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI try { InitialContext ctx = new InitialContext(); Object objref = ctx.lookup(“MeuEJB”); Object obj = PortableRemoteObject.narrow(objref, MeuEJB.class); EJBHome ejb = (EJBHome)obj; ejb.servico() } catch (NamingException ne) { System.err.println(se); } catch (ServiceLocatorException se) { System.err.println(se); } catch (Exception e) { System.err.println(se); } Monday, August 17, 2009
  121. 121. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  122. 122. Lato Sensu em Sistemas Orientados a Objetos Solução Desenvolvimento de Aplicaões Web Avançado - 2°/2009 auxílio à lista Monday, August 17, 2009
  123. 123. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Service Locator 102 Monday, August 17, 2009
  124. 124. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator • Solução - O Service Locator centraliza todo o acesso ao servidor JNDI, facilitando: Localização de objetos EJBHome. Localização de serviços como conexões de bancos de dados ou conexões de servidores de messaging. Localização de canais e filas JMS Obtenção de variáveis configuradas. - Service Locator pode melhorar a performance da pesquisa oferecendo um cache para as pesquisas mais frequentes. Monday, August 17, 2009
  125. 125. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator Estrutura Monday, August 17, 2009
  126. 126. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator Participantes e Responsabilidades Monday, August 17, 2009
  127. 127. // imports public class ServiceLocator { Service Locator private InitialContext initialContext; private Map cache; código de exemplo private static ServiceLocator _instance; static { try { _instance = new ServiceLocator(); } catch (ServiceLocatorException se) { System.err.println(se); } } private ServiceLocator() throws ServiceLocatorException { try { initialContext = new InitialContext(); cache = Collections.synchronizedMap(new HashMap()); } catch (NamingException ne) { throw new ServiceLocatorException(ne); } catch (Exception e) { throw new ServiceLocatorException(e); } } static public ServiceLocator getInstance() { return _instance; } // implement lookup methods here . . . } Monday, August 17, 2009
  128. 128. Service Locator código de exemplo public EJBLocalHome getLocalHome(String jndiHomeName) throws ServiceLocatorException { EJBLocalHome localHome = null; try { if (cache.containsKey(jndiHomeName))‫‏‬ { localHome = (EJBLocalHome)cache.get(jndiHomeName); } else { localHome = (EJBLocalHome)initialContext.lookup(jndiHomeName); cache.put(jndiHomeName, localHome); } } catch(NamingException nex)‫‏‬ { throw new ServiceLocatorException(nex); } catch (Exception ex)‫‏‬ { throw new ServiceLocatorException(ex); } return localHome; } Monday, August 17, 2009
  129. 129. // lookup a remote home given the JNDI name for the remote home public EJBHome getRemoteHome(String jndiHomeName, Class homeClassName) throws ServiceLocatorException { EJBHome remoteHome = null; try { if (cache.containsKey(jndiHomeName))‫‏‬ { remoteHome = (EJBHome) cache.get(jndiHomeName); } else { Object objref = initialContext.lookup(jndiHomeName); Object obj = PortableRemoteObject.narrow(objref, homeClassName); remoteHome = (EJBHome)obj; cache.put(jndiHomeName, remoteHome); } } catch (NamingException nex)‫‏‬ { throw new ServiceLocatorException(nex); } catch (Exception ex)‫‏‬ { throw new ServiceLocatorException(ex); } return remoteHome; } Monday, August 17, 2009
  130. 130. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service Locator • Padrões Relacionados - Business Delegate - Session Facade - Transfer Object Assembler - Data Access Object Monday, August 17, 2009
  131. 131. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate Monday, August 17, 2009
  132. 132. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Contexto Monday, August 17, 2009
  133. 133. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema Monday, August 17, 2009
  134. 134. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI Monday, August 17, 2009
  135. 135. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI EJB Monday, August 17, 2009
  136. 136. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema JNDI RMI EJB Monday, August 17, 2009
  137. 137. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema EJB JNDI RMI Monday, August 17, 2009
  138. 138. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema EJB EJB JNDI JNDI RMI RMI Monday, August 17, 2009
  139. 139. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema EJB EJB JNDI JNDI RMI RMI Monday, August 17, 2009
  140. 140. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema ! WebService! Monday, August 17, 2009
  141. 141. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema WebService! Monday, August 17, 2009
  142. 142. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução EJB EJB JNDI JNDI RMI RMI Monday, August 17, 2009
  143. 143. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Problema EJB JNDI RMI Monday, August 17, 2009
  144. 144. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate • Problema - A disponibilização direta de uma API de negócio força o cliente a tratar características específicas de natureza distribuída da tecnologia EJB. - Pode haver um impacto em desempenho se a camada de apresentação realizar um grande número de invocações remotas. - Os componentes da camada de apresentação ficam vulneráveis a mudanças na implementação de componentes de negócio. Monday, August 17, 2009
  145. 145. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Solução Business Delegate EJB JNDI RMI JNDI RMI EJB Monday, August 17, 2009
  146. 146. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Mais comum Business Delegate + Session Facade Busines s Session Delegat e Facade Monday, August 17, 2009
  147. 147. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate Benefícios • O padrão esconde os detalhes do componente de negócio - Serviços de nomes e lookup. - Tratamento de exceções remotas, JMS etc. - Pode tratar exceções de sistema e gerar exceções de aplicação. - Pode realizar operações novas tentativas de conexão em caso de falha. • Mecanismo de Cache • Pode ser usado para reduzir o acoplamento entre outras camadas. Monday, August 17, 2009
  148. 148. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate Estrutura Monday, August 17, 2009
  149. 149. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate Participantes e Responsabilidades Monday, August 17, 2009
  150. 150. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate • Conseqüências - Reduz o acoplamento. - Traduz exceções de sistema em exceções de aplicação. - Pode prover melhor desempenho. - Esconde a natureza remota da aplicação ao cliente. - Introduz uma nova camada para a aplicação. Monday, August 17, 2009
  151. 151. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Business Delegate • Padrões Relacionados - Service Locator - Proxy [GoF] - Adapter [GoF] Monday, August 17, 2009
  152. 152. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker Monday, August 17, 2009
  153. 153. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Front Controller + Dispatcher + View Helper Service to Worker Monday, August 17, 2009
  154. 154. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker Estrutura Monday, August 17, 2009
  155. 155. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker Participantes e Responsabilidades Monday, August 17, 2009
  156. 156. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker • Conseqüências - Centraliza o controle com baixo acoplamento. - Aumenta o potencial de reuso. - Melhora a separação de papéis no projeto. Monday, August 17, 2009
  157. 157. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Service to Worker • Padrões Relacionados - Front Controller e View Helper - Dispatcher View Monday, August 17, 2009
  158. 158. Lato Sensu em Sistemas Orientados a Objetos Desenvolvimento de Aplicaões Web Avançado - 2°/2009 Revisão • Remote Proxy • Session Facade - Procurador - Despachante • Front Controller • Service Locator - Porteiro Zé - 102 • Intercepting Filter • Business Delegate - Motores de Combustão Interna - Proxy do Session Facade Procurador da Secretária • View Helper • Service-to-Worker - Ajudante - Roteador Inteligente • Transfer Object • Dispatcher-to-View - Sacola da Feira - Roteador Burro Monday, August 17, 2009
  159. 159. Lato Sensu em Sistemas Orientados a Objetos Q&A MSc. Alexandre Gomes alegomes@gmail.com Monday, August 17, 2009

×