domingo, 13 de março de 2011

GWT: A longa estrada

Em dezembro de 2009, decidi aprender GWT. Na época, estava interessado nas possibilidades desta escolha: apps mais inteligentes e interativas, menos round-trips no servidor, melhor tempo de resposta, envio de cálculos para serem feitos no lado cliente, deixando para o servidor apenas a responsabilidade de entregar os dados necessários para os cálculos, etc...

Porém o aprendizado não tem sido fácil. Em 2010, a principal referência de como arquitetar uma App GWT era a aprensentação de Ray Ryan, no Google I/O 2009. Ainda assim, os padrões apresentados mais pareciam peças de um quebra-cabeças, que precisavam ser experimentadas para encontrar o melhor encaixe, antes da grande figura se revelar e "cair a ficha" de como se tornar produtivo usando a tal caixinha de ferramentas...

Foi uma excelente experiência, onde extrapolei meus skills de programação, por 5 anos viciados no J2EE old-style modo de desenvolver. Este estudo rendeu frutos:
  • Artigos publicados na Revista MundoJ
    • Mar/2010 - Edição 40: Hello GWT!
    • Mai/2010 - Edição 41: GWT: Uma arquitetura MVP
    • Jan/2011 - Edição 45: GWT 2.1 e o Framework MVP Oficial da Google
    • Mai/2011 - Edição 47: Top Secret ("Aguarde e confie", parodiando o "grande trapalhão"...)
  • Sistemas Desenvolvidos:
Neste momento, estou tentando inserir a API RequestFactory na arquitetura. Já investi umas boas 30 horas tentando... Ela é mais intrusiva que as demais APIs - fornece facilidades tanto na integração com os Widgets, com a framework MVP, ainda que seu principal papel seja melhorar a comunicação cliente-servidor, viabilizando uma arquitetura baseada em DTOs. É uma API que dá um medo de começar a usar "de qualquer jeito", e criar pequenos frankesteins...

Para "piorar", sei que, depois desse aprendizado, ainda terei que investir mais umas boas horas para aprender a usar o GWT Designer e o Spring Roo, que prometem para o desenvolvedor benefícios tanto em usabilidade quanto em produtividade.

A API RequestFactory

De todos os desafios para aprender GWT, de longe o maior enigma está sendo a API Request Factory. Sua documentação é superficial, mostrando apenas como fazer a comunicação cliente-servidor. No release do GWT 2.2, a documentação foi complementada, mostrando como se usar uma abordagem ServiceLayer como alternativa à abordagem ActiveRecord introduzida pelo GWT 2.1. Mas a documentação ainda não ajuda muito a encaixar as peças da API com o restante do quebra-cabeças.

Depois de muito tentar e ainda não se sentir tão seguro com esta API, decidí debulhar a principal fonte de documentação disponível: o código-fonte da aplicação Expenses, distribuída no diretório samples do GWT. Minha expectativa é que, tentando refazer a aplicação, passo-a-passo, consiga finalmente compreender todo o poder e as facilidades que ela oferece.

O código-fonte será disponibilizado em https://github.com/fabiolnm/Expenses-GWT.

Happy GWTting!

2 comentários:

  1. Fábio, acho que esses teu "feeling" sobre o GWT e, em especial, a API RequestFactory são uma unanimidade. Não se trata de "apenas" aprender uma nova API. Se faz necessário aprender um novo approach para arquitetura de sistemas. Confesso que esse desafio torna-se uma barreira para adotar o GWT em larga escala, pois para um software-house é um custo significativo investir umas 300 horas em cada membro da equipe para reaprender a trabalhar. Além disso, temos que lembrar que nem tudo são flores. O GWT e suas API ainda possuem sérias limitações e alguns trade-off impostos são muito ruins. Devo citar, em especial, o acréscimo de complexidade para adotar uma boa separação entre "designer" e o programação uma vez que os CSS também são "empacotados" no WAR da aplicação.

    ResponderExcluir
  2. Kra.. vc escreveu exatamente o que estou passando no momento...

    Estou tentando fazer um simples CRUD de um cadastro de Cidade>Estado>Pais mas já são dois dias lendo e relendo documentação oficial e até agora nada de conseguir implementar o tal do RequestFactory, em especial porque estou adotando DAO a parte das classes entidades diferentemente do que a documentação sugere.

    Você conseguiu algum progresso? Teria algum material para me ajudar? Qualquer coisa seria bem vinda pois seus links atuais estão quebrados...

    Desde já agradeço...
    [email/msn: dipold[arroba]gmail.com]

    ResponderExcluir