Grails – Muito além do CRUD - Artigo Java Magazine 91

O artigo apresenta diversos recursos do Grails através do desenvolvimento de uma aplicação de exemplo, ilustrando assim o potencial do framework.

Atenção: esse artigo tem um vídeo complementar. Clique e assista!

De que se trata o artigo:

O artigo apresenta diversos recursos do Grails através do desenvolvimento de uma aplicação de exemplo, ilustrando assim o potencial do framework.

Para que serve:

Este artigo serve para demonstrar a implementação de diversas funcionalidades de uma aplicação web, realizada de maneira simples e produtiva utilizando o framework Grails.

Em que situação o tema é útil:

O framework Grails provê um ambiente já pré-configurado e integrado, permitindo ao desenvolvedor não perder tempo com configurações iniciais. Além disso, oferece diversos recursos que são comumente utilizados nas aplicações, de forma ágil e fácil, como a geração de CRUDs, acesso a dados, configuração de logs, filtros de segurança, Ajax etc.

Resumo DevMan:

O Grails é um framework MVC que utiliza a linguagem dinâmica Groovy e que roda sobre a máquina virtual Java (JVM). Sua arquitetura foi construída em cima de frameworks consolidados de mercado, como o Hibernate, Spring, Log4J e Sitemesh.

Além do CRUD, que é gerado facilmente pelo framework, outros recursos habitualmente usados em aplicações web são disponibilizados por este de forma bastante simples e produtiva, tais como criação de filtros de pesquisa, segurança, criação de taglibs, Ajax, gráficos e relatórios. Dessa forma o desenvolvedor pode manter o foco no domínio da aplicação, deixando de gastar tempo com arquiteturas complexas e questões de infraestrutura.

O desenvolvimento de aplicações web utilizando a plataforma Java EE tem crescido demasiadamente nos últimos anos, e para atender a essa demanda são oferecidas diversas opções de frameworks e bibliotecas. Neste contexto, a arquitetura proposta pela plataforma Java para aplicações web é bastante rica, porém muito complexa, dado que foi construída para atender a diferentes situações e propósitos.

Essa complexidade, aliada ao leque enorme de opções de frameworks, trazem alguns problemas à plataforma Java que a tornam pouco produtiva comparada a outras tecnologias web. Seguem alguns dos problemas percebidos pelo mercado na prática:

• Leva-se muito tempo para configurar uma aplicação e deixá-la pronta para iniciar o desenvolvimento. Para isso, é necessário configurar frameworks, bibliotecas externas, arquivos XML, properties, etc.;

• O processo de integrar os diversos frameworks na maioria das vezes não é trivial, pois existem versões que são incompatíveis umas com as outras;

• Algumas funcionalidades, que existem em qualquer aplicação, são implementadas toda vez que uma nova aplicação é criada. Dentre estas podemos citar: desenvolvimento de CRUDs, configuração de logs, internacionalização, acesso a dados, relatórios, etc.;

• Com certa frequência, muitos softwares são construídos com arquiteturas mais complexas do que realmente necessitam.

Para resolver tais problemas, surgiram no mercado frameworks como Ruby on Rails e Grails (Groovy on Rails). Ambos possuem os mesmos princípios, entretanto o diferencial do Grails é ser executado em cima da máquina virtual Java (JVM), aproveitando toda a maturidade e robustez da plataforma. Seguem suas principais características:

• Utiliza os conceitos:

o Convention over Configuration: Convenção ao invés de configuração significa obter mais produtividade através de convenções previamente definidas, aumentando a padronização e evitando configurações trabalhosas de XML, arquivos de propriedades, logs etc.;

o Don't Repeat Yourself: O framework já oferece tarefas padrões do desenvolvimento de aplicações, como a geração de CRUDs, log pré-configurado etc.;

• Utiliza a linguagem dinâmica Groovy, que estende a linguagem Java oferecendo suporte a closures, duck typing, facilidade na manipulação de listas, hashes, tipos primitivos, invocação de métodos dinamicamente etc.;

• Fornece um ambiente de desenvolvimento completo pré-configurado e integrado, permitindo o foco no domínio da aplicação;

• Sua arquitetura foi construída em cima de frameworks consolidados no mercado, tais como Hibernate, Spring, Sitemesh e Log4j.

A proposta desse artigo não é ensinar o básico do framework, e sim mostrar, através de um exemplo prático, a produtividade do Grails para outros aspectos comuns no desenvolvimento de uma aplicação. Filtros de busca, segurança, Ajax, gráficos e relatórios são alguns desses aspectos abordados pelo artigo. Os artigos Grails: do Groovy à Web – Partes 1 a 5 (Edições 75-79 da Java Magazine) são uma excelente opção para iniciar o aprendizado com o framework.

Closure: Uma closure é uma estrutura de código contendo um bloco de instruções que realiza uma determinada operação. Ela é mais abrangente que um método, pois sua estrutura pode ser atribuída a uma variável e também ser passada como parâmetro na chamada de outras funções. No exemplo abaixo entenderemos melhor esses conceitos. Definimos uma closure que retorna como resultado o parâmetro passado elevado ao quadrado e atribuímos esta closure à variável square. Depois definimos a função aplicaFuncaoMatematica, que recebe como parâmetro uma função e uma lista qualquer. A função aplicaFuncaoMatematica irá aplicar a função passada como parâmetro (em nosso caso, square) em cada elemento da lista.

//definindo a closure square def square = {it*it} //definindo a função matemática def aplicaFuncaoMatematica = {funcao, lista -> def retorno = [] for (obj in lista) { retorno += funcao(obj) } return retorno } // imprimindo o resultado na tela println aplicaFuncaoMatematica(square, [1, 2, 3, 4]) // imprimirá [1, 4, 9, 16]

Duck typing: É o conceito de linguagens orientadas a objetos que define que: se um objeto de uma classe X se comporta como um objeto de uma classe ou interface Y, então este objeto pode ser tratado como um objeto do tipo Y sem ter que herdar ou implementar Y. No exemplo abaixo, a classe Bicicleta, embora não seja um veículo no mundo real, se comporta como um ao possuir o método mover(). Dessa forma, Bicicleta pode ser vista como um veículo. Então, podemos criar uma lista contendo diferentes instâncias de carros e bicicletas e chamar o método mover(), independente de termos uma superclasse comum ou uma interface definida com este método.

class Carro { public void mover() { println 'O carro se nove' } } class Bicicleta { public void mover() { println 'A bicicleta se nove' } } def veiculos = [new Carro(), new Bicicleta()] for (v in veiculos) { v.mover() }

A aplicação locacar – uma locadora de veículos

A aplicação que iremos utilizar como base para todos os nossos exemplos é uma locadora de veículos, que batizamos de “locacar”. Seu objetivo é sistematizar as operações de locação de veículos realizadas por diferentes usuários. A Figura 1 mostra a definição do domínio do problema.

Figura 1. Diagrama de classes de domínio da aplicação locacar.

Configurando o ambiente

Antes de iniciar o desenvolvimento da aplicação propriamente dita com o Grails, vamos explicar como instalar o framework, uma ferramenta de suporte e como configurá-la. Também vamos mostrar como criar a aplicação locacar e fazer alguns ajustes iniciais.

Instalando o Grails

A instalação do framework Grails é bastante simples. Segue uma descrição detalhada de como instalar e configurar o ambiente no sistema operacional Windows:

• Baixe a última versão do Grails em www.grails.org/Download e descompacte-a em um diretório;

• Configure a variável de ambiente JAVA_HOME apontando para o diretório raiz do JDK. Ex: D:\Documents and Settings\CYEW\Meus documentos\samuel\java\jdk1.6.0_14;

• Configure a variável de ambiente GRAILS_HOME apontando para o diretório raiz de instalação do Grails. Ex: D:\Documents and Settings\CYEW\Meus documentos\samuel\java\grails\grails-1.3.4;

• Configure a variável de ambiente PATH para adicionar as variáveis JAVA_HOME e GRAILS_HOME;

• Execute grails help na linha de comando e verifique se é exibida uma lista com os comandos disponíveis pelo Grails.

Instalando a ferramenta

A ferramenta que iremos utilizar é a STS, uma IDE da Spring Source baseada na plataforma Eclipse. Segue um passo-a-passo para a sua instalação:

• Baixe a última versão do STS em www.springsource.com/products/springsource-tool-suite-download e descompacte-a em um diretório;

• Execute o programa [DIR-INSTALACAO]\springsource\sts-2.3.2.RELEASE\STS.exe"

[...] continue lendo...

Artigos relacionados