• Save
Grails: Java produtivo e divertido
Upcoming SlideShare
Loading in...5
×
 

Grails: Java produtivo e divertido

on

  • 7,938 views

Palestra apresentada sobre Groovy e Grails no SESTINFO, da Universidade Metodista do Estado de São Paulo.

Palestra apresentada sobre Groovy e Grails no SESTINFO, da Universidade Metodista do Estado de São Paulo.

Statistics

Views

Total Views
7,938
Views on SlideShare
4,084
Embed Views
3,854

Actions

Likes
8
Downloads
4
Comments
0

8 Embeds 3,854

http://lucastex.com.br 3778
http://www.slideshare.net 39
http://flavors.me 26
http://webcache.googleusercontent.com 5
http://theoldreader.com 2
http://translate.googleusercontent.com 2
http://twitter.com 1
http://localhost 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • - Apresenta&#xE7;&#xE3;o pessoal <br /> - Apresenta&#xE7;&#xE3;o profissional - desde fim 07, grails 0.3 - hoje grails 1.3.1 <br /> <br />
  • - groovy, grails, gaelyk, gradle, gant, gmaven <br />
  • <br />
  • agenda da palestra <br />
  • primeiro ponto, linguagem de script em cima da JVM. <br /> LINGUAGEM DE PROGRAMACAO, ou seja -> perguntar quantos programadores tem, e para eles perguntar proximo slide <br />
  • O que te deixa motivado a programar? <br /> O que te incentiva a programar? <br /> O que te d&#xE1; vontade de programar mais, quando voc&#xEA; acaba de programar? <br /> Exemplos de Servlet -> Struts1 e Struts1 -> Webwork. <br />
  • pensar no problema que voc&#xEA; tem que resolver e n&#xE3;o em como usar uma ferramenta para resolver o problema. PROGRAMAR = PENSAR + CODIFICAR. <br /> se voce nao pensa, o que voc&#xEA; &#xE9;? <br />
  • MACACO DE CODIGO! Falar do &#x201C;Teorema do macaco infinito&#x201D; <br />
  • &#xE9; isso que eu quero, pensar. <br /> e &#xE9; isso que groovy nos deixa fazer, codificar menos pra poder pensar mais <br /> Exemplo disso: <br />
  • SCRIPT -> deixar claro, SCRIPT, executar in line <br /> proposito do programa: um metodo que filtra palavras menores (ou igual) a X letras <br /> explicar por cima o c&#xF3;digo, e mostrar que &#xE9; uma classe java <br />
  • destaque = valor do c&#xF3;digo, l&#xF3;gica (o que tivemos que pensar) <br /> branco = linguagem, estrutura, &#x2018;perda de tempo&#x2019; <br />
  • groovy vem tentar balancear esta equa&#xE7;&#xE3;o, tirando o m&#xE1;ximo destes 80. <br /> vou agora mostrar as facilidades e os &#x201C;atalhos&#x201D; que groovy traz pra que a gente consiga balancear a equaceao <br />
  • Marrom - Classes frequentemente utilizadas, importar por default. (quantas classes no seu projeto importam java.util.*) <br /> Verde - Itera&#xE7;&#xE3;o de listas, no java 5 j&#xE1; tem foreach, mas acredite, d&#xE1; pra fazer melhor. <br /> Vermelho - Ponto e v&#xED;rgula - &#x201C;PRA QU&#xCA;?&#x201D; <br />
  • resultado <br />
  • Rosa - Consist&#xEA;ncia. M&#xE9;todo que faz a &#x2018;mesma&#x2019; coisa, com nome diferente. <br /> Vermelho - Eu quero um script. Por que definir classe? Pra que explicitar o c&#xF3;digo a ser executado? <br /> Amarelho - Territ&#xF3;rio &#x2018;controverso&#x2019;, tipagem din&#xE2;mica <br />
  • resultado <br />
  • VERDE - return? PRA QUE? eu devolvo o que eu tenho na m&#xE3;o. se meu ultimo statement me deu um list, vai o list, se o ultimo statement me devolve um int, vai o int? Por que? Por que se eu terminei de executar o metodo, eu tenho o que eu quero. Se eu nao tenho, ainda falta alguma coisa, n&#xE9;? <br /> AMARELO - Lista? Nada mais simples? <br /> VERMELHO - Concatena&#xE7;&#xE3;o de strings? O que &#xE9; pior, usar o + ou o .concat? <br /> AZUL - Imprimir, &#xE9; isso que eu quero, s&#xF3; isso, IMPRIMIR (println &#xE9; um m&#xE9;todo da classe PrintStream, que &#xE9; o out, uma referencia statica dentro da classe System), t&#xE1;, e ai? <br />
  • resultado <br />
  • VERDE - Parenteses. eu nao falo &#x201C;INICIO&#x201D; &#x201C;OI TUDO BEM?&#x201D; &#x201C;FIM&#x201D; quando converso. <br /> AZUL - Facilidade pra trabalhar com listas. Afinal, quase sempre que voc&#xEA; itera uma lista, &#xE9; pra fazer alguma coisa com seu conte&#xFA;do. Filtrar, calcular, etc. <br />
  • resultado <br />
  • AMARELO - M&#xE9;todo pra que? Se eu tenho uma instru&#xE7;&#xE3;o apenas para executar? <br />
  • resultado <br />
  • Este &#xE9; o nosso Seletor.groovy. Quanto de c&#xF3;digo tem aqui? Quanto de linguagem tem? <br />
  • &#x201C;esse eh o seletor.groovy&#x201D; <br /> Amarelo = quanto precisei pensar. <br /> branco, quanto precisei escrever pro programa entender o meu objetivo <br /> Compara&#xE7;&#xE3;o com prox slide a quantidade de instrucoes do programa <br />
  • esse eh o seletor.java. falar que groovy &#xE9; legal, mas como adotar? <br /> que infra estrutura a gente precisa pra usar groovy? servidor? outra JVM? o que? <br /> groovy &#xE9; apenas um jar dentro da JVM.... <br />
  • porque groovy &#xE9; java. <br /> <br />
  • comparar os 2, dizer que um &#xE9; outro, e por isso que groovy &#xE9; java <br /> perguntar... &#x201C;groovy &#xE9; java?&#x201D; <br />
  • perguntar... &#x201C;groovy &#xE9; java?&#x201D; e dizer... &#x201C;n&#xE3;o!!&#x201D; <br /> passar o slide <br />
  • &#xE9; melhor. porque me deixa pensar no que resolver. <br /> e o que eu tinha que resolver no programa? quanto dele &#xE9; a resolu&#xE7;&#xE3;o do meu problema, e quanto dele &#xE9; linguagem de programa&#xE7;&#xE3;o? <br />
  • falar que groovy &#xE9; legal, mas como adotar? <br /> que infra estrutura a gente precisa pra usar groovy? <br />
  • <br />
  • <br />
  • trazendo a faciidade do groovy para o ambiente web <br /> exemplo de criando aplicacao &#x2018;standard&#x2019; em java.... <br />
  • cenario comum nas empresas para a cria&#xE7;&#xE3;o de uma aplica&#xE7;&#xE3;o <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • Bem vindo ao inferno <br /> configuracao da aplica&#xE7;&#xE3;o como um todo, pra poder come&#xE7;ar a colocar l&#xF3;gica... quanto tempo? (2 dias?) <br /> o que acontece quando voce fala que vai demorar 2 dias? o que o seu chefe pensa? no cronograma nao tinha o tempo pra isso, certo? <br />
  • esse &#xE9; um dos problemas que grails resolve, <br /> traz o desenvolvimento &#x201C;r&#xE1;pido&#x201D;. n&#xE3;o &#xE9; &#x2018;agil&#x2019;, &#xE9; &#x2018;r&#xE1;pido&#x2019; <br />
  • e &#xE9; isso que o grails nos traz. <br />
  • <br />
  • full stack, &#xE9; a estrutura completa para o desenvolvimento <br /> nao da pra falar de tudo, apenas de mapeamento or (GORM) <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • mostrar no proximo slide o resultado <br />
  • <br />
  • nesse slide j&#xE1; iniciar falando de CoC <br />
  • <br />
  • reflete em tabela pessoa com colunas e constraints <br /> 2 tipos de constraints - que mexe em schema e que soh via hibernate validator <br /> ressaltar Conv. OVER Conf. e n&#xE3;o Conv. INSTEAD of Conf. <br />
  • d&#xE1; poder sem tirar a liberdade de configurar do melhor jeito <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • alem disso, tem o controller com os metodos gerados <br />
  • <br />
  • <br />
  • falar dos templates <br />
  • <br />
  • <br />
  • falar que &#xE9; uma app a parte que faz merge com a sua <br /> qq tipo de resource... classe, tela, service, javascript, conf do web.xml <br /> gerenciamento automatico = baixar sozinho <br />
  • <br />
  • <br />
  • <br />
  • qual &#xE9; o segredo? na minha opiniao <br />
  • nao s&#xF3; framework, mas a empresa <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • em &#x201C;java/jvm&#x201D; falar da integracao com tudo que j&#xE1; existe, qq jar no lib e ponto <br />
  • <br />
  • <br />
  • michael apoia muito a divulgacao do groovy e grails por isso que deu os coupons <br />
  • brasilitfree - uma edicao de gra&#xE7;a - qualquer edi&#xE7;&#xE3;o <br /> brasilit10 - 10% em qq compra, seja de uma edicao, varias ou assinatura <br />
  • <br />
  • <br />
  • <br />

Grails: Java produtivo e divertido Grails: Java produtivo e divertido Presentation Transcript

  • Grails Java produtivo e divertido 1 @lucastex
  • Lucas Teixeira lucastex.com.br lucastex.com @lucastex 2 @lucastex
  • gr8forums.org 3 @lucastex
  • github.com/lucastex gsolr grails-stella grails-correios-br grails-featurable grails-file-uploader grails-tinyurl 4 @lucastex
  • - Groovy - Grails - Comunidade - Demo 5 @lucastex
  • Groovy 6 @lucastex
  • O que te motiva? 7 @lucastex
  • Pensar a maior parte do tempo 8 @lucastex
  • 9 @lucastex
  • Pensar 10 @lucastex
  • import java.util.List; import java.util.ArrayList; Seletor.java class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList(); for (int i = 0; i < palavras.size(); i++) { String pal = (String) palavras.get(i); if (pal.length() <= tamanho) { resultado.add(pal); } } return resultado; } public static void main(String[] args) { List linguagens = new ArrayList(); linguagens.add("Java"); linguagens.add("Scala"); linguagens.add("Groovy"); linguagens.add("Ruby"); Seletor seletor = new Seletor(); List selecionadas = seletor.selecionaMenoresQue(linguagens, 5); System.out.println("Total "+selecionadas.size()) for (int i = 0; i < selecionadas.size(); i++) { String sel = (String) selecionadas.get(i); System.out.println(sel); } } 11 @lucastex
  • import java.util.List; import java.util.ArrayList; class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList(); for (int i = 0; i < palavras.size(); i++) { String pal = (String) palavras.get(i); if (pal.length() <= tamanho) { resultado.add(pal); } } return resultado; } public static void main(String[] args) { List linguagens = new ArrayList(); linguagens.add("Java"); linguagens.add("Scala"); linguagens.add("Groovy"); linguagens.add("Ruby"); Seletor seletor = new Seletor(); List selecionadas = seletor.selecionaMenoresQue(linguagens, 5); System.out.println("Total "+selecionadas.size()) for (int i = 0; i < selecionadas.size(); i++) { String sel = (String) selecionadas.get(i); System.out.println(sel); } } 12 @lucastex
  • regra dos 80 - 20 13 @lucastex
  • import java.util.List; import java.util.ArrayList; class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList(); for (int i = 0; i < palavras.size(); i++) { String pal = (String) palavras.get(i); if (pal.length() <= tamanho) { resultado.add(pal); } } return resultado; } public static void main(String[] args) { List linguagens = new ArrayList(); linguagens.add("Java"); linguagens.add("Scala"); linguagens.add("Groovy"); linguagens.add("Ruby"); Seletor seletor = new Seletor(); List selecionadas = seletor.selecionaMenoresQue(linguagens, 5); System.out.println("Total "+selecionadas.size()) for (int i = 0; i < selecionadas.size(); i++) { String sel = (String) selecionadas.get(i); System.out.println(sel); } } 14 @lucastex
  • class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList() palavras.each { String pal -> if (pal.length() <= tamanho) { resultado.add(pal) } } return resultado } public static void main(String[] args) { List linguagens = new ArrayList() linguagens.add("Java") linguagens.add("Scala") linguagens.add("Groovy") linguagens.add("Ruby") Seletor seletor = new Seletor() List selecionadas = seletor.selecionaMenoresQue(linguagens, 5) System.out.println("Total "+selecionadas.size()) selecionadas.each { String sel -> System.out.println(sel) } } } 15 @lucastex
  • class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList() palavras.each { String pal -> if (pal.length() <= tamanho) { resultado.add(pal) } } return resultado } public static void main(String[] args) { List linguagens = new ArrayList() linguagens.add("Java") linguagens.add("Scala") linguagens.add("Groovy") linguagens.add("Ruby") Seletor seletor = new Seletor() List selecionadas = seletor.selecionaMenoresQue(linguagens, 5) System.out.println("Total "+selecionadas.size()) selecionadas.each { String sel -> System.out.println(sel) } } } 16 @lucastex
  • def selecionaMenoresQue(palavras, tamanho) { def resultado = new ArrayList() palavras.each { pal -> if (pal.size() <= tamanho) { resultado.add(pal) } } return resultado } def linguagens = new ArrayList() linguagens.add("Java") linguagens.add("Scala") linguagens.add("Groovy") linguagens.add("Ruby") def selecionadas = selecionaMenoresQue(linguagens, 5) System.out.println("Total "+selecionadas.size()) selecionadas.each { sel -> System.out.println(sel) } 17 @lucastex
  • def selecionaMenoresQue(palavras, tamanho) { def resultado = new ArrayList() palavras.each { pal -> if (pal.size() <= tamanho) { resultado.add(pal) } } return resultado } def linguagens = new ArrayList() linguagens.add("Java") linguagens.add("Scala") linguagens.add("Groovy") linguagens.add("Ruby") def selecionadas = selecionaMenoresQue(linguagens, 5) System.out.println("Total "+selecionadas.size()) selecionadas.each { sel -> System.out.println(sel) } 18 @lucastex
  • def selecionaMenoresQue(palavras, tamanho) { def resultado = [] palavras.each { pal -> if (pal.size() <= tamanho) { resultado.add(pal) } } resultado } def linguagens = ["Java","Scala","Groovy","Ruby"] def selecionadas = selecionaMenoresQue(linguagens, 5) println("Total ${selecionadas.size()}") selecionadas.each { sel -> println(sel) } 19 @lucastex
  • def selecionaMenoresQue(palavras, tamanho) { def resultado = [] palavras.each { pal -> if (pal.size() <= tamanho) { resultado.add(pal) } } resultado } def linguagens = ["Java","Scala","Groovy","Ruby"] def selecionadas = selecionaMenoresQue(linguagens, 5) println("Total ${selecionadas.size()}") selecionadas.each { sel -> println(sel) } 20 @lucastex
  • def selecionaMenoresQue(palavras, tamanho) { palavras.findAll { it.size() <= tamanho } } def linguagens = ["Java","Scala","Groovy","Ruby"] def selecionadas = selecionaMenoresQue(linguagens, 5) println "Total ${selecionadas.size()}" selecionadas.each { sel -> println sel } 21 @lucastex
  • def selecionaMenoresQue(palavras, tamanho) { palavras.findAll { it.size() <= tamanho } } def linguagens = ["Java","Scala","Groovy","Ruby"] def selecionadas = selecionaMenoresQue(linguagens, 5) println "Total ${selecionadas.size()}" selecionadas.each { sel -> println sel } 22 @lucastex
  • def linguagens = ["Java","Scala","Groovy","Ruby"] def selecionadas = linguagens.findAll { it.size() <= 5 } println "Total ${selecionadas.size()}" selecionadas.each { sel -> println sel } 23 @lucastex
  • Seletor.groovy def linguagens = ["Java","Scala","Groovy","Ruby"] def selecionadas = linguagens.findAll { it.size() <= 5 } println "Total ${selecionadas.size()}" selecionadas.each { sel -> println sel } 24 @lucastex
  • Seletor.groovy def linguagens = ["Java","Scala","Groovy","Ruby"] def selecionadas = linguagens.findAll { it.size() <= 5 } println "Total ${selecionadas.size()}" selecionadas.each { sel -> println sel } 25 @lucastex
  • import java.util.List; import java.util.ArrayList; Seletor.java class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList(); for (int i = 0; i < palavras.size(); i++) { String pal = (String) palavras.get(i); if (pal.length() <= tamanho) { resultado.add(pal); } } return resultado; } public static void main(String[] args) { List linguagens = new ArrayList(); linguagens.add("Java"); linguagens.add("Scala"); linguagens.add("Groovy"); linguagens.add("Ruby"); Seletor seletor = new Seletor(); List selecionadas = seletor.selecionaMenoresQue(linguagens, 5); System.out.println("Total "+selecionadas.size()) for (int i = 0; i < selecionadas.size(); i++) { String sel = (String) selecionadas.get(i); System.out.println(sel); } } 26 @lucastex
  • Groovy é Java! 27 @lucastex
  • import java.util.List; import java.util.ArrayList; Seletor.java class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList(); for (int i = 0; i < palavras.size(); i++) { String pal = (String) palavras.get(i); if (pal.length() <= tamanho) { resultado.add(pal); } } return resultado; } public static void main(String[] args) { List linguagens = new ArrayList(); linguagens.add("Java"); linguagens.add("Scala"); linguagens.add("Groovy"); linguagens.add("Ruby"); Seletor seletor = new Seletor(); List selecionadas = seletor.selecionaMenoresQue(linguagens, 5); System.out.println("Total "+selecionadas.size()) for (int i = 0; i < selecionadas.size(); i++) { String sel = (String) selecionadas.get(i); System.out.println(sel); } } 28 @lucastex
  • import java.util.List; import java.util.ArrayList; Seletor.groovy class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList(); for (int i = 0; i < palavras.size(); i++) { String pal = (String) palavras.get(i); if (pal.length() <= tamanho) { resultado.add(pal); } } return resultado; } public static void main(String[] args) { List linguagens = new ArrayList(); linguagens.add("Java"); linguagens.add("Scala"); linguagens.add("Groovy"); linguagens.add("Ruby"); Seletor seletor = new Seletor(); List selecionadas = seletor.selecionaMenoresQue(linguagens, 5); System.out.println("Total "+selecionadas.size()) for (int i = 0; i < selecionadas.size(); i++) { String sel = (String) selecionadas.get(i); System.out.println(sel); } } 29 @lucastex
  • Groovy é melhor que Java! 30 @lucastex
  • import java.util.List; import java.util.ArrayList; Seletor.java class Seletor { private List selecionaMenoresQue(List palavras, int tamanho) { List resultado = new ArrayList(); for (int i = 0; i < palavras.size(); i++) { String pal = (String) palavras.get(i); if (pal.length() <= tamanho) { resultado.add(pal); } } return resultado; } public static void main(String[] args) { List linguagens = new ArrayList(); linguagens.add("Java"); linguagens.add("Scala"); linguagens.add("Groovy"); linguagens.add("Ruby"); Seletor seletor = new Seletor(); List selecionadas = seletor.selecionaMenoresQue(linguagens, 5); System.out.println("Total "+selecionadas.size()) for (int i = 0; i < selecionadas.size(); i++) { String sel = (String) selecionadas.get(i); System.out.println(sel); } } 31 @lucastex
  • Seletor.groovy def linguagens = ["Java","Scala","Groovy","Ruby"] def selecionadas = linguagens.findAll { it.size() <= 5 } println "Total ${selecionadas.size()}" selecionadas.each { sel -> println sel } 32 @lucastex
  • “When you program in groovy, in many ways you're writing a special kind of java” (Dierk König) 33 @lucastex
  • Grails 34 @lucastex
  • cenário comum 35 @lucastex
  • - Spring 36 @lucastex
  • - Spring - Hibernate 37 @lucastex
  • - Spring - Hibernate - JSF 38 @lucastex
  • - Spring - Hibernate - JSF - DWR 39 @lucastex
  • - Spring - Hibernate - JSF - DWR - Velocity 40 @lucastex
  • - Spring - Hibernate - JSF - DWR - Velocity - Tuckey 41 @lucastex
  • 42 @lucastex
  • Que você é incompetente Que você é mentiroso Que colocar todos os frameworks juntos toma tempo e pode gerar problemas 43 @lucastex
  • - Desenvolvimento rápido - Full stack - Fácil bootstrap - Convenções - CoC - Scaffolding - Plugins 44 @lucastex
  • - Desenvolvimento rápido - Full stack - Fácil bootstrap - Convenções - CoC - Scaffolding - Plugins 45 @lucastex
  • Full Stack - mapeamento or - gorm - log - url rewrites - view e decoration - controladores - controle transacional - configuração por ambiente 46 @lucastex
  • Mapeamento OR - gorm 47 @lucastex
  • Mapeamento OR - gorm Pessoa.findAllByNomeLikeAndIdadeGreaterThan(“%lucas%”, 25) 48 @lucastex
  • Mapeamento OR - gorm Pessoa.findAllByNomeLikeAndIdadeGreaterThan(“%lucas%”, 25) Pessoa.get(1234) 49 @lucastex
  • Mapeamento OR - gorm Pessoa.findAllByNomeLikeAndIdadeGreaterThan(“%lucas%”, 25) Pessoa.get(1234) Date dateCreated Date lastUpdated 50 @lucastex
  • Mapeamento OR - gorm Pessoa.findAllByNomeLikeAndIdadeGreaterThan(“%lucas%”, 25) Pessoa.get(1234) Date dateCreated Date lastUpdated Pessoa.findXXX(xxx, [max:10, offset:10, sort: “nome”, order: “asc”, cache: true]) 51 @lucastex
  • Mapeamento OR - gorm Pessoa.findAllByNomeLikeAndIdadeGreaterThan(“%lucas%”, 25) Pessoa.get(1234) Date dateCreated Date lastUpdated Pessoa.findXXX(xxx, [max:10, offset:10, sort: “nome”, order: “asc”, cache: true]) Pessoa.findAll(“from Pessoa p where p.idade = 25”) 52 @lucastex
  • Mapeamento OR - gorm Pessoa.findAllByNomeLikeAndIdadeGreaterThan(“%lucas%”, 25) Pessoa.get(1234) Date dateCreated Date lastUpdated Pessoa.findXXX(xxx, [max:10, offset:10, sort: “nome”, order: “asc”, cache: true]) Pessoa.findAll(“from Pessoa p where p.idade = 25”) def onLoad() { ... } def beforeInsert() { ... } def beforeUpdate() { ... } def beforeDelete() { ... } 53 @lucastex
  • - Desenvolvimento rápido - Full stack - Fácil bootstrap - Convenções - CoC - Scaffolding - Plugins 54 @lucastex
  • Fácil bootstrap ‣ grails create-app umesp ‣ grails run-app 55 @lucastex
  • 56 @lucastex
  • gerenciamento de dependências banco de dados mapeamento de urls controladores dominios (tabelas) bundles de internacionalização servicos reutilizáveis taglibs classes utilitarias telas e páginas jars de bibliotecas scripts de automatização outros fontes dependentes testes pasta de arquivos web @lucastex
  • - Desenvolvimento rápido - Full stack - Fácil bootstrap - Convenções - CoC - Scaffolding - Plugins 58 @lucastex
  • CoC - Classes de domínio class Pessoa { String nome String telefone String email String cpf static constraints = { nome(nullable:false) telefone(nullable:true, maxSize: 8) email(email:true) cpf(cpf:true) } } 59 @lucastex
  • CoC - Classes de domínio class Pessoa { String nome String telefone String email String cpf static constraints = { nome(nullable:false) telefone(nullable:true, maxSize: 8) email(email:true) cpf(cpf:true) } static mapping = { table ‘TBL_PESS’ nome column:‘STR_NM’ telefone column: ‘STR_TLFN’ email column: ‘STR_ML’ CPF column: ‘STR_CPF’ } } 60 @lucastex
  • CoC - Controllers class PessoaController { def criar = { def pessoa = new Pessoa(params) pessoa.save() } } 61 @lucastex
  • CoC - Controllers class PessoaController { def criar = { def pessoa = new Pessoa(params) pessoa.save() } } http://localhost:8080/app/pessoa/criar 62 @lucastex
  • CoC - Controllers class PessoaController { def criar = { def pessoa = new Pessoa(params) pessoa.save() } } http://localhost:8080/app/pessoa/criar grails-app/ views/ pessoa/ criar.gsp 63 @lucastex
  • - Desenvolvimento rápido - Full stack - Fácil bootstrap - Convenções - CoC - Scaffolding - Plugins 64 @lucastex
  • Scaffolding - Prototipação das Domain Classes - Estático / Dinâmico (templates) - Integridade relacional e dos tipos - Validação 65 @lucastex
  • Scaffolding 66 @lucastex
  • Scaffolding 67 @lucastex
  • Scaffolding 68 @lucastex
  • Scaffolding estático ‣ grails generate-all Pessoa 69 @lucastex
  • Scaffolding estático ‣ grails generate-all Pessoa 70 @lucastex
  • Scaffolding dinâmico class PessoaController { def scaffold = true } 71 @lucastex
  • Validação 72 @lucastex
  • - Desenvolvimento rápido - Full stack - Fácil bootstrap - Convenções - CoC - Scaffolding - Plugins 73 @lucastex
  • Plugins - fácil extensão - modularização de aplicações - adição de métodos / comportamento - gerenciamento automático 74 @lucastex
  • Plugins - 500+ plugins atualmente - segurança - manipulação de imagens - cms / blog - quartz (agendamento) - ui - lucene 75 @lucastex
  • Plugins - mail - gwt - feed / rss - geração de diagramas de classe - gráficos - jquery - auditoria 76 @lucastex
  • Plugins - performance - behaviour - taggable - featurable - rateable - attachmentable - commentable 77 @lucastex
  • segredo? 78 @lucastex
  • Rock solid foundations - Spring 79 @lucastex
  • Rock solid foundations - Spring - Hibernate 80 @lucastex
  • Rock solid foundations - Spring - Hibernate - Sitemesh 81 @lucastex
  • Rock solid foundations - Spring - Hibernate - Sitemesh - Log4J 82 @lucastex
  • Rock solid foundations - Spring - Hibernate - Sitemesh - Log4J - Plugins 83 @lucastex
  • Rock solid foundations - Spring - Hibernate - Sitemesh - Log4J - Plugins - JAVA / JVM 84 @lucastex
  • Comunidade 85 @lucastex
  • Fontes de informação - grails.org - gr8forums.org (en) - grailsbrasil.com (pt) - springsource.com - groovy.codehaus.org - twitter (#groovy e #grails) - Listas de e-mail - groovy-user - grails-user 86 @lucastex
  • GroovyMag.com 87 @lucastex
  • brasilitfree brasilit10 88 @lucastex
  • Dúvidas? 89 @lucastex
  • Demo! 90 @lucastex
  • Grails Java produtivo e divertido Lucas Teixeira lucastex.com.br lucastex.com @lucastex @lucastex