Slide 1

Slide 1 text

Produtividade no Desenvolvimento Web com GWT \,,/

Slide 2

Slide 2 text

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.

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

1. Maven ● Ferramenta para gerenciamento e automação de projetos Java mantido pela Apache Foundation; ● Bem documentado; ● Muito bem aceito pela comunidade Java.

Slide 5

Slide 5 text

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 :)

Slide 6

Slide 6 text

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.

Slide 7

Slide 7 text

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;

Slide 8

Slide 8 text

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.

Slide 9

Slide 9 text

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...)

Slide 10

Slide 10 text

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"

Slide 11

Slide 11 text

Guice ● @Inject like a boss ● Providers para dependências complexas ● DI em servlets ● Suporte a AOP ● Qualifiers / Named ● Escopo (Singleton, Request, Session...)

Slide 12

Slide 12 text

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.

Slide 13

Slide 13 text

5. Guice-Persist ● @Inject EntityManager ○ ou @Inject Provider usando Session-per-request (web apps, maoe) ● @Transactional ○ adeus tratamento de transações replicados por aí (AOP). ● Múltiplos PersistenceUnits.

Slide 14

Slide 14 text

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.

Slide 15

Slide 15 text

Componentes Insuficientes? ● GXT (feio) ● Smart GWT (bobo) ● GWT-Bootstrap (melhor do melhor do sul do mundo) ○ http://gwtbootstrap.github.com

Slide 16

Slide 16 text

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.

Slide 17

Slide 17 text

GWT ● EventBus - observer de eventos. ○ Yeah, você pode criar eventos personalizados. ○ Diminui o muito acoplamento

Slide 18

Slide 18 text

7. MVP

Slide 19

Slide 19 text

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);

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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).

Slide 23

Slide 23 text

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.

Slide 24

Slide 24 text

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..."

Slide 25

Slide 25 text

10. Dúvidas? RTSL: http://github.com/caarlos0/meditec

Slide 26

Slide 26 text

No content