quarta-feira, 19 de agosto de 2009

Google Web Toolkit - Impressões

O que é

Framework para desenvolvimento de aplicações RIA (Rich Internet Applications) baseado em Java desenvolvido pelo Google.

Vantagens

Confiabilidade

Framework Open Source, maduro e amplamente aceito pelo mercado, a primeira versão foi lançada em 2005.

Garantia

Dificilmente a tecnologia vai ser descontinuada, já que o Google é o criador do mesmo.

Chega de Plug-Ins

Não é necessário instalar nenhum Plug-In no navegador do cliente.

Widgets

O GWT oferece uma vasta gama de componentes prontos chamados de Widgets e ainda existem empresas terceiras que desenvolvem gratuitamente mais Widgets para o GWT.

Cases

Várias aplicações de sucesso da Web 2.0 utilizam o GWT:

Drools

Gmail

Google Docs


Desvantagens


Produtividade

Não possui interface de Design como o Dreamweaver ou o Visual Studio, por exemplo, portanto não é possível visualizar a tela até iniciar o processo de Debug. Ou seja, o desenvolvedor constrói a tela no escuro, visualizando o resultado apenas em RunTime.

Maior tempo de Análise

Por possuir uma estrutura mais complexa na geração da interface, visando garantir reaproveitamento e padronização de código, é necessária uma análise mais complexa antes do desenvolvimento de cada classe, adotando padrões e convenções que devem ser respeitados por toda a equipe de desenvolvimento, já que alguns desenvolvedores da equipe devem se preocupar com a User Interface em si, e outros com o comportamento destes objetos, que por sua vez devem respeitar as regras de negócio estabelecidas por um terceiro grupo de desenvolvedores, os da Regra de Negócio.

Como funciona

Client Side

Desenvolvimento da UI

O GWT oferece várias APIs aonde o desenvolvedor escreve código Java para a criação da interface visual da aplicação, não escrevendo código HTML ou JavaScript. Ou seja, o desenvolvedor codifica em Java e faz o Deploy de JavaScript.

Após a criação dos objetos Java (POJOs), o compilador do GWT traduz o código em JavaScript e HTML, criando uma versão do código para cada um dos navegadores mais utilizados, entre eles o Chrome, IE, Firefox e Safari, resolvendo assim o problema do navegador cruzado. Ou seja, não há o risco de a aplicação funcionar de um jeito ou não funcionar dependendo do Browser.

Figura 1: Fluxo de Trabalho. Fonte: Global Code

CSS

É possível utilizar arquivos CSS para definir todo o tema visual da aplicação, como se estes arquivos CSS fossem ser utilizados por uma página Web comum. Isso garante transparência no desenvolvimento, pois o Web Designer não precisa ter ligação alguma com o escopo da aplicação.

Internacionalização

É possível definir um arquivo de constantes para cada idioma desejado que a aplicação suporte, sendo assim, dependendo do idioma do navegador do cliente, todos os textos da aplicação serão exibidos naquele idioma. Portanto, durante o desenvolvimento, não há a necessidade de se preocupar com este fator.

Server Side

O GWT realiza chamadas assíncronas (AJAX) aos componentes da camada de Negócio, tais chamadas podem ser realizadas via RPC ou HTTP.

RPC

O GWT realiza uma chamada a um serviço (Servlet *) de forma assíncrona, após o retorno desta chamada realiza alguma ação (callback).

Figura 2: Chamada RPC. Fonte: Global Code

* Classe Java capaz de responder a reaquisições de protocolos Web.

HTTP

Solução utilizada quando a regra negócio ou algum outro tipo de informação que será consumida pela aplicação não está nela mesmo. Tal solução é aplicada então quando se trabalha com WebService (Arquitetura SOA).

Figura 3: Arquitetura SOA. Fonte: Google Images

Conclusões

Realizei um Estudo de caso aonde criei uma aplicação GWT com o Eclipse.

Processo de instalação

Totalmente fácil, automatizado, apenas inseri a URL do servidor e o Eclipse realizou o download do Plug-IN e o instalou automaticamente na IDE, gerando assim o template e a barra de ferramentas do GWT.

Terminada a instalação eu gerei o projeto de exemplo.

Desenvolvimento do lado Cliente

Criei uma tabela através dos Widgets: Label, TextBox e DatePicker. Através desta tabela é possível inserir e excluir linhas dinamicamente através de dois botões de ação.

Agrupei os componentes da tabela utilizando um Widget do tipo Panel, que além de agrupador serve para melhor distribuir os componentes na tela.

Encontrei dificuldade apenas em saber exatamente como estava ficando a interface, o que me forçou a ir ver a aplicação em RunTime inúmeras vezes. Creio que este tipo de problema seja sanado à medida que eu for me habituando com a ferramenta.

O resultado pode ser visto abaixo:








Foram criadas 3 classes de interface para montar e controlar o Widget. O que resultou em aproximadamente 4 horas de desenvolvimento, número bastante elevado, porém mantendo-se a rigor o padrão de orientação a objetos e consultando-se diversas vezes a documentação do GWT visando utilizá-lo da melhor e mais correta maneira possível.















Desenvolvimento do lado Servidor

Não desenvolvi nenhuma chamada ao Servidor, apenas utilizei a chamada pronta que veio com a aplicação de exemplo e a modifiquei. Tal chamada foi do tipo RPC, aonde o servidor capturava alguns dados, transformava em String e devolvia para o cliente.

Não encontrei nenhuma dificuldade em entender o processo de requisição. Como estou em um ambiente JAVA EE, posso plugar qualquer Framework para me auxiliar no lado servidor, como o JPA (para dados) e o Spring (para inversão de controle e metodologia MVC), desfrutando assim de toda a robustez do EJB.

Considerações Finais

Acredito que o GWT é uma excelente aposta para o desenvolvimento de aplicações RIA aonde a preocupação do Gerente é manter um alto grau de escalabilidade e robustez sem esquecer de lado uma interface extremamente rica, leve e amigável para o usuário, não importando qual seja o perfil do mesmo.

Referências

Site Oficial: Google Web Toolkit. Disponível em: http://code.google.com/webtoolkit/

Global Code: Introdução a Google Web Toolkit. Disponível em http://www.globalcode.com.br/download/minicursos/mc56-gwt.pdf