SlideShare una empresa de Scribd logo
1 de 49
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 on 
Rails” até ser renomeado para Grails, após pedido do 
fundador do projeto “Ruby on Rails”, David Heinemeier 
Hansson.
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 
Comando: create-app livraria 
IDE:
Estrutura Criada
Plugins e Dependências 
 Plugin responsável por efetuar validação de campos CPF, 
CNPJ e CEP
Configuração do Banco de Dados 
Caso 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ínio 
Comando: 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
Scaffolding 
 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 Dinâmico 
 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. 
Comando: create-controller livraria.Livro 
IDE: 
Código gerado: 
Os controladores são gerados em grails-app/controller
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: 
Controladores e Visões geradas: 
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)
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 javascript 
Adicionar 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 scaffolding 
Comando: install-templates 
IDE:
Personalização dos templates 
utilizados no scaffolding 
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)
Template: Controller.groovy 
O 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.gsp 
O 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:
Personalização dos templates 
utilizados no scaffolding 
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: 
Livro Autor Categoria
Mapeamento URL 
Por 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:
Controlador: MainController 
Implemente o controlador conforme imagem abaixo: 
Observe que apenas usuários autenticados com os papéis de 
‘Role_ADMIN e ‘ROLE_CLIENTE’ tem acesso ao controlador.
Controlador: MainController 
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:
Criando usuários e papéis no 
BootStrap.groovy
Executando a aplicação
Executando a aplicação 
Abra no seu navegador a url: http://localhost:8080/livraria
Perguntas?

Más contenido relacionado

La actualidad más candente

Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introduçãoJosino Rodrigues
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2Cezar Souza
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2Cezar Souza
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitFlávio Lisboa
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visagejesuinoPower
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Sergio Lima
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11Cezar Souza
 
Chega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidChega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidBruno Oliveira
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e HudsonRodrigo Branas
 

La actualidad más candente (20)

Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Curso de ReactJS
Curso de ReactJSCurso de ReactJS
Curso de ReactJS
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Mean Stack
Mean StackMean Stack
Mean Stack
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
 
React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
Começando com Zend Framework 2
Começando com Zend Framework 2Começando com Zend Framework 2
Começando com Zend Framework 2
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Jclouds jug vale
Jclouds jug valeJclouds jug vale
Jclouds jug vale
 
Zend Framework 1.11
Zend Framework 1.11Zend Framework 1.11
Zend Framework 1.11
 
Chega de lendas! JavaFX em Android
Chega de lendas! JavaFX em AndroidChega de lendas! JavaFX em Android
Chega de lendas! JavaFX em Android
 
Maven 3, Sonar e Hudson
Maven 3, Sonar e HudsonMaven 3, Sonar e Hudson
Maven 3, Sonar e Hudson
 
Precisamos falar sobre Gradle
Precisamos falar sobre GradlePrecisamos falar sobre Gradle
Precisamos falar sobre Gradle
 

Similar a Desenvolvimento Ágil com Grails.

Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoGuilhermeJorgeAragod
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-ptPedro Sousa
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Julian Cesar
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLIVanessa Me Tonini
 
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingLeitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingVinícius Thiengo
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemRodrigo Valerio
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifaguestea329c
 
Desenvolvendo com Angular CLI
Desenvolvendo com Angular CLIDesenvolvendo com Angular CLI
Desenvolvendo com Angular CLIVanessa Me Tonini
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterEric Silva
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Maurício Linhares
 

Similar a Desenvolvimento Ágil com Grails. (20)

Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
 
Ruby On Rails Regis
Ruby On Rails RegisRuby On Rails Regis
Ruby On Rails Regis
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
Workshop Ruby on Rails dia 2 ruby-pt
Workshop Ruby on Rails dia 2  ruby-ptWorkshop Ruby on Rails dia 2  ruby-pt
Workshop Ruby on Rails dia 2 ruby-pt
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLI
 
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingLeitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXing
 
Apresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvemApresentação CEJS - Do nada para a nuvem
Apresentação CEJS - Do nada para a nuvem
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Desenvolvendo com Angular CLI
Desenvolvendo com Angular CLIDesenvolvendo com Angular CLI
Desenvolvendo com Angular CLI
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
CEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniterCEPUG 2 - Bem-vindo a Framework CodeIgniter
CEPUG 2 - Bem-vindo a Framework CodeIgniter
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
 
Django
DjangoDjango
Django
 

Desenvolvimento Ágil com Grails.

  • 1. GRAILS Desenvolvimento Web Ágil Paradigma: “Programação por convenção”
  • 2. 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 on Rails” até ser renomeado para Grails, após pedido do fundador do projeto “Ruby on Rails”, David Heinemeier Hansson.
  • 3. Alta Produtividade  Rapidamente você cria toda a estrutura de sua aplicação web;  Gera CRUD(Create, Read, Update and Delete) com apenas alguns comandos;
  • 4. 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;
  • 5. Completo  Possui todos os componentes necessários para iniciar o trabalho:
  • 6. Don’t Repeat Yourself – Não se Repita  Tarefas repetitivas são realizadas pelo framework e não mais pelo desenvolvedor
  • 7. 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
  • 8. • 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)
  • 9. • 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()
  • 10. • 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
  • 11. • Principais diferenças entre Groovy e Java • Tipagem opcional (duck typing) Duck typing: Se aje como um pato, é um pato! Quack!
  • 12. • Principais diferenças entre Groovy e Java • Return: sempre é o valor de retorno do último comando
  • 13. • Principais diferenças entre Groovy e Java • Conceito de verdade: qualquer valor diferente de null
  • 14. • Principais diferenças entre Groovy e Java • Geração dinâmica (implícita) de get() e set() Java: Groovy:
  • 15. • 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)
  • 19. Criando uma aplicação Comando: create-app livraria IDE:
  • 21. Plugins e Dependências  Plugin responsável por efetuar validação de campos CPF, CNPJ e CEP
  • 22. Configuração do Banco de Dados Caso 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
  • 23. Criando as classes de Domínio Comando: create-domain-class livraria.Livro IDE: Os domínios são gerados em grails-app/domain
  • 24. Estrutura de um domínio Campos de Validação:
  • 25. Estrutura de um domínio
  • 26. Scaffolding  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;
  • 27. Scaffolding Dinâmico  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. Comando: create-controller livraria.Livro IDE: Código gerado: Os controladores são gerados em grails-app/controller
  • 28. 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: Controladores e Visões geradas: 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)
  • 29. 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.
  • 30. Plugins de Autenticação de Usuário e Bibliotecas javascript Adicionar 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
  • 31. 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.
  • 32. Visão da página principal para diferentes papéis de usuário Visão Administrador Visão Cliente
  • 33. 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.
  • 34. 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
  • 35. Personalização dos templates utilizados no scaffolding Comando: install-templates IDE:
  • 36. Personalização dos templates utilizados no scaffolding 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)
  • 37. Template: Controller.groovy O 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’
  • 38. 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:
  • 39. 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.
  • 40. Template: show.gsp O 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:
  • 41. Personalização dos templates utilizados no scaffolding 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: Livro Autor Categoria
  • 42. Mapeamento URL Por 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.
  • 43. Controlador: MainController Comando: create-controller livraria.Main IDE:
  • 44. Controlador: MainController Implemente o controlador conforme imagem abaixo: Observe que apenas usuários autenticados com os papéis de ‘Role_ADMIN e ‘ROLE_CLIENTE’ tem acesso ao controlador.
  • 45. Controlador: MainController 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:
  • 46. Criando usuários e papéis no BootStrap.groovy
  • 48. Executando a aplicação Abra no seu navegador a url: http://localhost:8080/livraria