Introdução ao Framework Grails

  • 1,037 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,037
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
43
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Transcript

  • 1. GRAILS
  • 2. Bruno Gama CatãoPai em tempo integralProfessor da Facisa Sistemas de Informação Jogos DigitaisCoordenador do LTITento levar alguns projetos open source: github.com/brunogamacatao
  • 3. grails.org
  • 4. O que é ?• Tecnologia para construção RÁPIDA e FÁCIL de aplicações para a Internet (web)
  • 5. GRAILS = GROOVY + RAILS
  • 6. GROOVY ? Groovy Java
  • 7. Código Javapublic class AloMundo { private String nome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String saudacao() { return "Oi " + nome; } public static void main(String[] args) { AloMundo alo = new AloMundo(); alo.setNome("Fulano"); System.out.println(alo.saudacao()); }}
  • 8. Código Groovypublic class AloMundo { private String nome; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public String saudacao() { return "Oi " + nome; } public static void main(String[] args) { AloMundo alo = new AloMundo(); alo.setNome("Fulano"); System.out.println(alo.saudacao()); }}
  • 9. É a mesma coisa ?! ... então, qual avantagem disso ?
  • 10. Código Groovy class AloMundo { private String nome Pra quê ; String getNome() { ? return nome } void setNome(String nome) { this.nome = nome To das as } classes e String saudacao() { omé todos sã return "Oi " + nome é }pú blicos at que prove o static void main(String[] args) { trário ! AloMundo alo = new AloMundo() con alo.setNome("Fulano") System.out.println(alo.saudacao()) } }
  • 11. Código Groovy class AloMundo { String nome String saudacao() { return "Oi " + nome } static void main(String[] args) { AloMundo alo = new AloMundo() alo.setNome("Fulano")Atribut os já tem System.out.println(alo.saudacao()) et e set } g } au tomático ) (prop riedades
  • 12. Código Groovy Ao invés System.o de class AloMundo { ut.println def nome apenas p use rintln ;) def saudacao() { return "Oi " + nome } static main(args) { def alo = new AloMundo() alo.setNome("Fulano") Lin guagens println(alo.saudacao()) r temente } fo } tipad as estãofora de moda !
  • 13. Código Groovy Versão fi class AloMundo { nal ! def nome e formaOlha qu def saudacao() { construir return "Oi ${nome}"legal de } Strings ! static main(args) { def alo = new AloMundo() alo.nome = "Fulano" println alo.saudacao() Não precisa } } chamar get/set
  • 14. • Resultado: • 21 linhas Java contra 13 linhas Groovy • Limpamos o lixo do código !
  • 15. Java - Lendo um Arquivoimport java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;public class LeArquivo { public static void main(String[] args) { try { BufferedReader arquivo = new BufferedReader(new FileReader("/etc/passwd")); String line = null; while ((line = arquivo.readLine()) != null) { System.out.println(line); } arquivo.close(); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex) { ex.printStackTrace(); } }}
  • 16. Groovy - Lendo um Arquivo Tá quase bom ... class LeArquivo { static main(args) { new File("/etc/passwd").eachLine({line -> println(line) }) } } p assar um Podemos closure, código,bloco de ! râmetro como pa
  • 17. Groovy - Lendo um Arquivo e la só tem Versão fi asse, sePra quê uma cl nal ! o main ? u m métodnew File("/etc/passwd").eachLine {line -> println line} Pense bem ... ne m todos os parêntesis são n ecessários !
  • 18. Entendendo Melhor Groovy
  • 19. Variáveisdef nomeDaVariavel = valorDaVariavelEx:def idade = 28def nome = “Bruno”
  • 20. Strings 1/2def nome = José da Silvadef cidade = "Campina Grande"def texto = Oi,como vai você ?Tudo bem ?def expr = /Contra-barras são bem vindas !/
  • 21. Strings 2/2 • GStrings (Groovy Strings) podem ser construídos de duas formas: • Concatenação: + • Expressões: ${expressão}def primeiroNome = Josédef ultimoNome = Silvadef nomeCompleto = primeiroNome + + ultimoNome//Expressões devem vir em Strings com aspas duplas !def nomeCompleto = "${primeiroNome} ${ultimoNome}"
  • 22. Listasdef listaVazia = []def frutas = [Banana, Maçã]frutas << Abacateprint listaVazia.size() // 0print frutas[2] // Maçã//O trecho abaixo dá no mesmo ...def nomes = new ArrayList()nomes.add(Bruno)//Porém não é muito Groovy
  • 23. Mapsdef mapaVazio = [:]def preco = [cocaCola: 2.00, coxinha: 2.50]print preco[pipoca] // 0.50preco[guarana: 1.50]
  • 24. Métodosdef saudacao(nome) { print "Oi ${nome}, como vai você ?"}def soma(a, b) { a + b // Não precisa do return}
  • 25. Closures 1/3• É um novo tipo de dado;• Representa um trecho de código;• Pode ser passado como argumento em métodos e armazenado em variáveis.
  • 26. Closures 2/3def saudacao = {print "Oi, como vai?"}saudacao() // "Oi como vai?"// Parâmetro implícito: itdef saudacao2 = { print "Oi ${it} como vai?"}saudacao("Bruno") // "Oi Bruno como vai?"def soma = { a, b -> a + b // Lembrem-se, não precisa do return}soma(2, 3) // 5
  • 27. Closures 3/3def executaOperacao(a, b, operacao) { operacao(a, b)}def multiplicacao = {a, b -> a * b}def subtracao = {a, b => a - b}executaOperacao(5, 2, multiplicacao) // 10executaOperacao(5, 2, subtracao) // 3
  • 28. Novos Operadores• Spread: *.• Elvis: ?:• Safe navigation: ?.• Contém: in• Conversão: as• Identidade: is
  • 29. E o Grails ?
  • 30. TODO o Código de uma Aplicação Web gera as Contato.groovy Est e código anco de class Contato { tab elas do b sultas, e String nome da dos, con página s em 13 String telefone idiomas ! } ContatoController.groovy class ContatoController { def scaffold = Contato }
  • 31. Isso é bom ?
  • 32. Vantagens• Mais fácil de manter• Mais fácil de testar• Resultados rápidos• Aumenta a diversão
  • 33. E a infra-estrutura ?
  • 34. Tudo é Java• Você só está digitando menos !• Tudo vai para um arquivo WAR• Base sólida: • JPA (Hibernate) • Spring • Sitemesh ...
  • 35. ALGUNS CONCEITOS
  • 36. • Convenção ao invés de codificação• Scaffolding (andaime)• Templates• Boas ferramentas
  • 37. MÃO NA MASSA !!!