Desenvolvimento Ágil com Grails.

49
GRAILS Desenvolvimento Web Ágil Paradigma: “Programação por convenção”

description

Desenvolvimento Ágil com Grails

Transcript of Desenvolvimento Ágil com Grails.

GRAILS

Desenvolvimento Web Ágil

Paradigma:

“Programação por convenção”

O que é Grails?

Framework para desenvolvimento de aplicações web na plataforma Java utilizando a linguagem Groovy, principais características:

ALTA produtividade;

Programação por convenção;

Completo;

Don’t Repeat Yourself (DRY);

Curiosidade: Inicialmente chamado de “Groovy onRails” até ser renomeado para Grails, após pedido do fundador do projeto “Ruby on Rails”, David HeinemeierHansson.

Alta Produtividade

Rapidamente você cria toda a estrutura de sua aplicação web;

Gera CRUD(Create, Read, Update and Delete) com apenas alguns comandos;

Programação por Convenção

Modelo de desenvolvimento de software que busca diminuir as decisões que os desenvolvedores precisam tomar;

Caso o programador não queira configurar nada, basta seguir a convenção do framework;

Aumenta a produtividade devido ao fato do programador não precisar se preocupar com as configurações e sim com a lógica de negócio;

Completo

Possui todos os componentes necessários

para iniciar o trabalho:

Don’t Repeat Yourself – Não se Repita

Tarefas repetitivas são realizadas pelo

framework e não mais pelo

desenvolvedor

O que é Groovy?

Linguagem idealizada por James

Strachan (2003)

As primeiras versões de testes surgiram em

2004

A primeira versão oficial (1.0) foi lançada em

2007

A segunda versão (2.0) foi lançada em 2012

• Groovy: linguagem JVM com o objetivo inicial de

extender Java.

• Uso de metaprogramação

• Compila bytecode (assim como Java)

• Interoperabillidade (Java roda Groovy, Groovy roda

Java)

• Principais diferenças entre Groovy e Java:

• Enquanto Java tem tipos primitivos e não-primitivos,

tudo em Groovy é objeto (Object)

• Tipagem opcional (duck typing)

• Um comando numa linha não exige ponto-e-vírgula

• Return: sempre é o valor de retorno do último comando

• Conceito de verdade: qualquer valor diferente de null

• Geração dinâmica (implícita) de get() e set()

• Principais diferenças entre Groovy e Java

• Enquanto Java tem tipos primitivos e não-primitivos,

tudo em Groovy é objeto (Object)

• Um comando numa linha não exige ponto-e-vírgula

• Principais diferenças entre Groovy e Java

• Tipagem opcional (duck typing)

Duck typing: Se aje como um pato, é um pato! Quack!

• Principais diferenças entre Groovy e Java

• Return: sempre é o valor de retorno do último comando

• Principais diferenças entre Groovy e Java

• Conceito de verdade: qualquer valor diferente de null

• Principais diferenças entre Groovy e Java

• Geração dinâmica (implícita) de get() e set()

Java:

Groovy:

• E o que eu preciso fazer pra usá-lo?

• Uma versão do Java Development Kit(JDK) instalada

(não um JRE, hein!);

• A criação da variável de ambiente JAVA_HOME;

• Download do Grails;

• A criação da variável de ambiente GRAILS_HOME;

• O desenvolvimento pode ser através do prompt de

comando ou por diversas IDE, no nosso exemplo

utilizamos a IDE Groovy/Grails Tool Suite (GGTS)

Projeto Livraria

Tabelas no banco

Tabelas no banco

Criando uma aplicação

IDE:

Comando: create-app livraria

Estrutura Criada

Plugins e Dependências

Plugin responsável por efetuar validação de campos CPF, CNPJ e CEP

Configuração do Banco de DadosCaso precise de um banco mais robusto, alterar as linhas em vermelho no arquivo grails-app/conf/DataSource.groovy

Adicionar o driver JDBC na

pasta grails-app/lib

Criando as classes de DomínioComando: create-domain-class livraria.Livro

IDE:

Os domínios são gerados em grails-app/domain

Estrutura de um domínio

Campos de Validação:

Estrutura de um domínio

Abordagem utilizada para geração de

artefatos(controladores, visões, etc) que

implementam as operações CRUD,

existem 2 abordagens:

Scaffolding Dinâmico;

Scaffolding Estático;

Scaffolding

Visões são geradas em tempo de execução, facilita o

desenvolvimento pois nenhum código relacionado aos

controladores e visões precisa ser desenvolvido.

Não útil para equipes que desejam personalizar o sistema.

Scaffolding Dinâmico

Comando: create-controller livraria.Livro

IDE:

Os controladores são gerados em grails-app/controller

Código gerado:

Scaffolding Estático Produz a partir de templates, o código dos controladores e

visões que podem ser personalizados pela equipe web.

O projeto exemplo utilizou essa abordagem pois necessitou de

algumas customizações nos controladores e visões.

Comando: generate-all livraria.Livro

IDE:

Os controladores são gerados em grails-app/controller, as visões Groovy Server Pages(GSPs) são geradas em grails-app/views/livro

Para cada método método correspondente a uma ação no controlador é criada uma visão (arquivo .gsp)

Controladores e Visões geradas:

BootStrap.groovy Essa classe é executada durante o boot da aplicação e serve, entre outros propósitos, para

inicializar a aplicação por exemplo, criando algumas instâncias de objetos.

Plugins de Autenticação de Usuário e

Bibliotecas javascriptAdicionar as seguintes linhas no arquivo BuildConfig.groovy para utilizar o plugin Grails spring-security que auxilia na autenticação dos usuários:

Adicionar em grails-app/web-app/js os seguintes .jar que serão utilizados para efetuar máscaras de CEP, CNPJ e CPF

Controle de Acesso de Usuários

Utilizaremos o plugin spring-security-core para controle de acesso de usuários, ele define uma série de comandos, entre eles o s2-quickstart que cria tanto as classes de domínio básicas tantos os controladores(e suas respectivas visões) necessários para lidar com a autenticação de usuários.

Ao executarmos o seguinte comando abaixo:

Será criada a seguinte estrutura:

• livraria.Usuario: classe de domínio que representa os usuários autenticados

• livraria.Papel: classe de domínio que representa os papéis que os usuários

podem desempenhar. Cada papel possui permissões associadas a ele.

• livraria.UsuarioPapel: classe de domínio que representa o relacionamento

muito-para-muitos entre usuário e papéis. Ou seja, um usuário pode

desempenhar vários papéis e um papel pode ser desempenhado por vários

usuários.

• LoginController e LogoutController (e suas respectivas visões) que são

responsáveis pelas operações de login e logout da aplicação.

Visão da página principal para

diferentes papéis de usuário

Visão Administrador Visão Cliente

Controle de Acesso de Usuários

Por fim adicione o seguinte trecho ao arquivo conf/Config.groovy para habilitar a chamada HTTP, POST e GET no controlador LogoutController que é responsável pela operação de logout.

Personalização dos templates

utilizados no scaffolding

Essa personalização tem como objetivo:

Gerar controladores e visões com

funcionalidades relacionadas ao controle

de acesso já incorporada;

Gerar visões create.gsp e edit.gsp com

máscaras de entrada para atributo CPF

Personalização dos templates

utilizados no scaffoldingComando: install-templates

IDE:

O comando anterior copia os templates usados nas atividades de geração de código

para o diretório src/templates. Esse diretório inclui:

O diretório artifacts contém os templates utilizados pelos comandos create-*

(create-domain-class, create-controller, etc);

O diretório scaffolding contém os templates utilizados pelos comandos generate-*

(generate-all, generate-controller, generate-views, etc). No contexto da nossa

aplicação apenas serão personalizados os templates presentes nesse diretório;

O diretório testing contém os templates utilizados na geração de artefatos de teste;

O diretório war contém o template do arquivo web.xml utilizado na geração do

arquivo deployment da aplicação (arquivo.war)

Personalização dos templates

utilizados no scaffolding

Template: Controller.groovyO plugin spring-security permite a utilização da anotação @Secured para aplicar regras de controle de acesso aos controladores( e suas respectivas ações), o template Controller.groovy é utilizado na geração dos controladores, ao alterá-lo, todos os controladores gerados após essa alteração irão seguir o novo formato.

Adicionando o trecho de código em vermelho dizemos que Para acessar um controlador, o usuário deve ter o papel ‘ROLE_ADMIN’ para acessar todas as ações ou ‘ROLE_CLIENTE’ para acessar a ação ‘show’

Template create.gsp e edit.gsp

O template create.gsp e edit.gsp é utilizado na geração de visões(views) create e edit

associadas a cada um dos controladores da aplicação, modificaremos ambos para

que seja permitido construir máscaras de CPF, CNPJ e CEP utilizando o plugin jQuery

Masked Input.Para que as visões(views) create.gsp e edit.gsp tenha a seguinte máscara:

Adiciona o seguinte trecho de código em vermelho abaixo:

Template: index.gsp

O template index.gsp é utilizado na geração das visões(views) associadas c cada um dos controladores da aplicação, modificando seguinte trecho de código em vermelho abaixo, estaremos permitindo a operação de criação de entidades (ação create()) apenas para usuários autenticados e que possui o papel necessário para executar essa ação.

Template: show.gspO template show.gsp é utilizado na geração das visões(views) associadas a cada um dos controladores da aplicação, modificando seguinte trecho de código em vermelho abaixo, estaremos realizando as seguintes modificações:

Operação create() apenas será apresentada se o usuário encontra-se autenticado e possui

papel necessário para executar essa ação:

Operação edit() e delete() apenas será apresentada se o usuário encontra-se autenticado e

possui papel necessário para executar essa ação:

Após realizar as alterações nos templates, é necessário executar o comando generate-all para que as alterações sejam refletidas nos controladores e visões da aplicação da livraria, efetuaremos o comando nas seguintes classes de domínio:

Personalização dos templates

utilizados no scaffolding

Livro Autor Categoria

Mapeamento URLPor convenção, a página principal é a que lista todos os controladores da

aplicação, iremos alterar o arquivo conf/URLMapping.groovy conforme abaixo

para que aponte para um controlador que iremos criar no próximo passo.

Controlador: MainController

Comando: create-controller livraria.Main

IDE:

Implemente o controlador conforme imagem abaixo:

Controlador: MainController

Observe que apenas usuários autenticados com os papéis de

‘Role_ADMIN e ‘ROLE_CLIENTE’ tem acesso ao controlador.

Crie uma visão(view) chamada index.gsp e coloque na pasta

grails-app/views/main e edite ela de tal maneira que fique

conforme abaixo:

Controlador: MainController

Criando usuários e papéis no

BootStrap.groovy

Executando a aplicação

Abra no seu navegador a url: http://localhost:8080/livraria

Executando a aplicação

Perguntas?