• Nenhum resultado encontrado

Comparativo de frameworks web

Uma vez que a proposta do trabalho é implementar um protótipo de um sistema disponibilizado como serviço web, foi necessário fazer um levantamento de tecnologias para desenvolvimento web disponíveis para averiguar qual delas melhor se adequa às condições e restrições do projeto. Algumas delas foram escolhidas para uma comparação: Java Server

Faces (JSF) e Struts/Struts2, que são padrões de mercado, além de Tapestry, Wicket e Grails.

A seguir é dada uma breve descrição de cada um dos frameworks.

JSF: trata-se de uma especificação padrão para o desenvolvimento de componentes de interfaces de usuário para aplicações web que executam no lado do servidor respondendo aos

eventos gerados pelo cliente. É uma tecnologia baseada na arquitetura Model View Controller (MVC), em que é feita a separação entre a camada de lógica e a camada de apresentação, e que possui um conjunto de Application Programming Interface (API) para fazer a representação e gerenciamento de estado dos componentes de interface de usuário, manipulação de eventos, regras de navegação de páginas, validação de entrada, suporte a internacionalização e acessibilidade.

Wicket: trata-se de um framework de código aberto, orientado a componentes para o

desenvolvimento de aplicações web escritas em Java. Propicia o desenvolvimento de aplicações web de maneira simples sem fazer uso de códigos complexos. Pelo contrário, são utilizados componentes reusáveis escritos em Java e HyperText Markup Language (HTML), havendo uma separação da lógica e utilizando um modelo de dados que segue o padrão JavaBeans.

Struts/Struts2: trata-se de um framework de código aberto para a criação de aplicações

Java web. Utiliza a arquitetura MVC, tem o suporte a AJAX, o qual propicia uma interface visual mais rica e intuitiva, pode ser integrado ao JSF e ao Spring, além de permitir o uso da Programação Orientada a Aspectos. Ele busca otimizar o ciclo de desenvolvimento por completo, atuando na construção, implantação e manutenção do sistema ao longo do tempo.

Tapestry: trata-se de um framework de código aberto para a criação de aplicações web

feitas em Java que sejam dinâmicas, robustas e escaláveis. A aplicação é dividida em um conjunto de páginas cada uma constituída de componentes de interface de usuário, possibilitando um melhor controle e responsabilidade para alguns pontos importantes como validação, internacionalização, tratamento de exceção. A integração com qualquer tipo de back-end como Spring e Hibernate acontece de maneira fácil.

Grails: trata-se de uma plataforma de aplicação web inovadora desenvolvida em

código aberto que propicia novos níveis de produtividade através do uso de princípios como Convenção sobre Configuração. O foco se dá em criação de aplicações de alta qualidade e alta usabilidade.

Cada um dos frameworks foi avaliado segundo os seguintes critérios:

• Produtividade – devido ao pouco tempo disponível para a implementação é necessária uma ferramenta que propicie uma produtividade elevada e que apresente um baixo grau de complexidade. Os fatores contribuintes são:

 Ausência de configuração de arquivos XML;

 Tamanho do código necessário para desenvolver alguma funcionalidade;

 Curva de aprendizagem; • Documentação;

• Tempo curto de implementação – influencia em todos os outros critérios avaliados;

• Suporte a Web Services;

JSF:

Produtividade: Arquivos XML – presentes. Tamanho do código – devido a estrutura do framework são necessárias a criação de classes responsáveis por fazer a manipulação de ações e observação de eventos, os objetos de negócio, classes controladoras (Servlets), além das páginas de visualização. Curva de aprendizagem – é um framework complexo em que é necessário compreender diversos elementos como ciclo de vida, comunicação entre managed

beans, árvore de componentes, modelo dos componentes, para que se possa desenvolver uma

aplicação e saber exatamente como ela funciona.

Documentação: suficiente, com a existência de manuais, guias de usuário, javadocs, bem organizada e clara.

Suporte a Web Services: possui

Wicket:

Produtividade: Arquivos XML - nenhum ou poucos arquivos XML para serem configurados. Tamanho do código - Para cada página de visualização (chamada de View) é necessária uma classe Java, que faz o tratamento apropriado da página e herda de uma View mais genérica. Curva de aprendizagem – é um framework do tipo baseado em componentes, sendo necessário aprender o funcionamento e a operação de suas estruturas. Apresenta uma curva de aprendizagem relativamente alta, agravada pela documentação de má qualidade.

Documentação: precária (difícil de encontrar) e de abordagem superficial.

Suporte a Web Services: não foi possível encontrar uma resposta precisa devido à pouca documentação disponível a respeito.

Tapestry:

Produtividade: Arquivos XML – presentes. Tamanho do código - Para cada página de visualização (chamada de View) é necessária uma classe Java, que faz o tratamento apropriado da página e herda de uma View mais genérica. Curva de aprendizagem – acentuada

devido a complexidade do framework, a incompatibilidade entre versões e a documentação de má qualidade.

Documentação: insuficiente, não são utilizados problemas do mundo real, pouco pragmática.

Suporte a Web Services: não foi possível encontrar uma resposta precisa devido à pouca documentação disponível a respeito.

Struts/Struts2:

Produtividade: Arquivos XML – são utilizados muitos deles. Tamanho do código – Classes especiais responsáveis por tratar os eventos e ações (Action e Form classes), herança de classes-base, muitos arquivos para escrever ou editar para implementar uma funcionalidade pequena. Curva de aprendizagem – acentuada devido à documentação ruim aliada ao pouco tempo disponível.

Documentação: precária, mal organizada. Suporte a Web Services: possui.

Grails:

Produtividade: Arquivos XML – não são utilizados. Tamanho do código – por se tratar de um framework que usa linguagem de script, a quantidade para se implementar a mesma funcionalidade quando comparado com os que não usam (o caso dos outros frameworks avaliados) é bem menor. Curva de aprendizagem – pequena, pois a linguagem utilizada (Groovy) possui uma sintaxe simples e é uma linguagem de script.

Documentação: suficiente, com a existência de manuais, guias de usuário, javadocs, bem organizada e clara.

Suporte a Web Services: possui.

Tabela 4 - Análise comparativa dos frameworks segundo os critérios estabelecidos. Critério/Framework JSF Struts/Struts2 Wicket Tapestry Grails

Configuração de arquivos XML

Possui Possui Pode possuir

Possui Não possui Tamanho do código Grande Grande Médio Médio Pequeno Curva de

aprendizagem

Média Alta Alta Alta Baixa

Documentação Boa Ruim Ruim Ruim Boa Suporte a Web

Services

Possui Possui Não

identificado Não

identificado

Possui

Dentre os frameworks avaliados, o que apresenta maior tendência de alta produtividade, menor curva de aprendizagem, suporte a web services e documentação adequada e suficiente foi o Grails, sendo o framework escolhido para implementação do protótipo. A Figura 8 ilustra suas principais características.

Figura 8: Principais características do Grails (SMITH, LEDBROOK, 2009).

O Grails é uma tecnologia que utiliza a linguagem de programação Groovy, sendo ambas baseadas na plataforma Java. Por esse motivo, a integração entre elas é total. Além

disso, foi desenvolvido utilizando como base tecnologias confiáveis, em vez de criar novas soluções. Dentre elas estão Hibernate, Spring, JUnit e Tomcat. Na Figura 9, é ilustrada a pilha das tecnologias que compõem o Grails.

Figura 9: Pilha de tecnologias do Grails (SMITH, LEDBROOK, 2009).

Adicionalmente, apresenta algumas características que favorecem um desenvolvimento mais rápido da aplicação como a utilização de Convention over

Configuration (CoC), scaffolding e templating.

Ao utilizar o CoC, o framework estabelece um padrão de nomenclatura para classes e métodos proporcionando uma diminuição da quantidade de configurações e mapeamentos realizados. Contudo, é possível configurar manualmente qualquer propriedade, o que sobrepõe a configuração padrão.

O scaffolding, por sua vez, permite a geração de artefatos que dão o suporte necessário às operações de criar, ler, atualizar e deletar registros (CRUD - Create, Read, Update,

Delete), utilizando convenções e poucas linhas de código. Em algumas situações, apenas uma

linha é usada.

Já o templating, com a disponibilização de diversos modelos tanto para os views quanto para os controllers, proporciona versatilidade e reusabilidade de recursos do

framework.

Com o uso dessas técnicas e tendo em vista os conceitos da filosofia ágil, é possível criar e executar uma aplicação simples em cinco passos:

1. Após feita a instalação, ao executar o comando grails create-app [nome do projeto], um novo projeto é criado;

2. No diretório raiz do projeto, ao executar o comando grails create-domain-class [nome da classe], uma nova classe é criada. Ela é um artefato persistente, logo, por padrão, seus atributos são persistidos no banco de dados;

3. Para inserir os atributos, deve-se abrir o arquivo gerado e inserir as propriedades desejadas. Ex.: class Pessoa { String nome, Integer idade }; 4. No diretório raiz, ao executar o comando grails generate-all [nome da classe

de domínio], os artefatos controller, view e test cases são gerados pelo

scaffolding;

5. Para iniciar a aplicação, basta executar o comando grails run-app [nome do projeto]. Para acessá-la, deve-se abrir o navegador e digitar http://localhost:8080/[nome do projeto].

Por fim, o apoio da comunidade de usuários também se faz presente e vem aumentando, seja pelas listas de discussões, melhoria da documentação ou mesmo pelo desenvolvimento de plugins. Tais contribuições são dadas tanto por usuários que possuem um vasto conhecimento do framework, quanto pelos novos.

Documentos relacionados