Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Produtividade no Desenvolvimento Web com GWT

Produtividade no Desenvolvimento Web com GWT

Curso ministrado no III Meditec - Medianeira In Tecnology - 2012

Carlos Alexandro Becker

June 27, 2012
Tweet

More Decks by Carlos Alexandro Becker

Other Decks in Technology

Transcript

  1. Carlos A. Becker • Graduado em Tecnologia em Análise e

    Desenvolvimento de Sistemas pela Universidade Tecnológica Federal do Paraná (UTFPR); • Cursando Especialização em Projeto e Desenvolvimento de Sistemas para a Internet e Dispositivos Móveis (UTFPR); • Desenvolvedor de Rich WebApps à 2 anos; • Gerente de Desenvolvimento e Arquiteto de Software na Digitaldoc.
  2. Agenda 1. Maven 2. JPA2 (JSR317) com EclipseLink 3. BeanValidation

    (JSR303) 4. DI com o Google Guice (JSR330) 5. Guice-Persist 6. GWT 7. MVP 8. GWT-Platform 9. Desvantagens 10. Dúvidas
  3. 1. Maven • Ferramenta para gerenciamento e automação de projetos

    Java mantido pela Apache Foundation; • Bem documentado; • Muito bem aceito pela comunidade Java.
  4. Maven • Plugins para geração de documentação, relatórios de code

    coverage, dependency tree, status dos testes, changelogs, desenvolvedores, modificações no projeto, etc etc etc • Logo ele aprenderá a fazer café também :)
  5. Tem que ter alguma coisa ruim nele, né? Sim, algumas:

    ◦ A configuração em si, facilmente vira um XML de 600 linhas "criptografado". ◦ Alguns bugs conhecidos, a grande maioria, felizmente, é contornável. ◦ Algumas IDE's (Eclipse) não se dão muito bem com ele em alguns casos (M2E bugado). ▪ Mas hey, funciona graciosamente bem no Netbeans e IntelliJ.
  6. 2. JPA2 (JSR317) + EclipseLink • A JPA é a

    API padrão para persistência de Objetos com Java; • EclipseLink é a implementação de referência da JPA2 (última versão), e é mantida pela Eclipse Foundation;
  7. JPA2 • Define diversas anotações e seus devidos comportamentos default:

    ◦ @Entity ◦ @Id ◦ @{Many,One}To{Many,One} ◦ ... • Configuração do banco de dados via XML.
  8. 3. BeanValidation (JSR303) • API padrão de validação de objetos

    para a plataforma Java; • HibernateValidator, Apache BVAL, ... • Permite a escrita de Validators personalizados (CPF, RG, etc...)
  9. 4. DI com o Google Guice (JSR330) • Em vez

    de obter as dependencias (FooFactory.get(Bar.class);), você opta por recebê-las de algum lugar. • IoC (Inversion of Control) - Princípio de Hollywood – "não nos chame; nós vamos chamá-lo"
  10. Guice • @Inject like a boss • Providers para dependências

    complexas • DI em servlets • Suporte a AOP • Qualifiers / Named • Escopo (Singleton, Request, Session...)
  11. Boas práticas sempre, com o Guice também :) • Minimizar

    a Mutabilidade; • Injetar somente dependências diretas; • Evitar o uso de dependências estáticas.
  12. 5. Guice-Persist • @Inject EntityManager ◦ ou @Inject Provider<EntityManager> usando

    Session-per-request (web apps, maoe) • @Transactional ◦ adeus tratamento de transações replicados por aí (AOP). • Múltiplos PersistenceUnits.
  13. 6. GWT • Aplicações dinâmicas "sem escrever nenhuma linha de

    JS e/ou CSS" • Extensível por meio de diversas API's • Interface declarativa • Ótimo desempenho para o usuário • Componentes bonitos e facilmente extensíveis.
  14. Componentes Insuficientes? • GXT (feio) • Smart GWT (bobo) •

    GWT-Bootstrap (melhor do melhor do sul do mundo) ◦ http://gwtbootstrap.github.com
  15. GWT • Conversão de código Java para Javascript - o

    flyweight que é muito lindo lá no servidor, complica sua vida aqui. • Chamadas Assíncronas, sempre (AJAX) - não tente fazer hacks. • Sugere o MVP ao invés do já tradicional e "antigo" MVC.
  16. GWT • EventBus - observer de eventos. ◦ Yeah, você

    pode criar eventos personalizados. ◦ Diminui o muito acoplamento
  17. 8. GWT-Platform • Te obriga a utilizar os melhores padrões

    para aplicações GWT - segundo os engenheiros do GWT :) • Muuuuito código que você acabaria escrevendo para facilitar sua vida, já está aqui, provavelmente melhor do que você faria (sem ofenças); • DI com o GIN (GWT INjection);
  18. Presenters • Vários métodos para capturar eventos do seu ciclo

    de vida. • Proxyes - code split ◦ Será injetada somente uma versão "leve" da presenter no DOM, até você realmente precisar dela :) • Nested Presenters FTW
  19. PlaceManager • Esconde/Revela Presenters "sem mudar de página" • Mas

    trata o histórico do browser utilizando um hackzinho maroto (hidden iframe) • Passagem de parâmetros: ◦ http://foo.com/#cliente;id=2
  20. DispatchAsync - Command Pattern • Melhor forma de fazer chamadas

    assíncronas com GWT-RCP; • Encapsulamento; • Action/Result/ActionHandler; • Boilerplate Generation (clichê) ◦ Gen Action/Result w/ Annotation Processing. • Suporte a Undo; • Proteção contra XSRF (Cross-Site Request Forgery).
  21. 9. Desvantagens • Uso de memória ram em modo Dev;

    • Demora para compilar; • Necessidade de uma "DTO Layer" para "desencantar" objetos "encantados" pela CGLib/EclipseLink/etc (Lembra do flyweight?); • Curva de aprendizado.
  22. 10. "Dúvidas" comuns • "Ai carlos não gostei disso de

    fazer uma DTO layer..." • "Ouvi falar que o GWT tá sendo descontinuado por causa do Google Dart e da tecnologia XYZ... é verdade?" • "Ninguém usa, não vou usar." • "Ahh, eu uso o MVC diferente..."