Grails from scratch




       Gustavo Pinto
     gustavopinto.org
 twitter.com/gustavopinto
Agenda
Introdução
  Modelos ágeis
Groovy
  Hands on
Grails
  Da instalação à aplicação
Dicas
Introdução
    Modelos ágeis
      Processos,  técnicas, ferramentas, whatever
 
    O que é ser ágil?
 
    Porque precis...
Introdução
Necessidades básicas
  D.R.Y principle
  convention-over-configuration
  Lightweight
Introdução
    D.R.Y principle ?
    convention-over-configuration ?
    lightweight ?
 
    O Que usar?
Introdução
D.R.Y principle ?
convention-over-configuration ?
lightweight ?


             GRAILS
Introdução
D.R.Y principle ?
convention-over-configuration ?
lightweight ?


             GRAILS
Groovy
Linguagem OO baseada no Java
Mas com boas idéias de outras linguagens
   Ruby, Python
Roda na JVM
Tipagem dinâmica
...
Groovy




Radar de tecnologia - ThoughtWorks
Groovy




groovyconsole.appspot.com
Rails
Groovy + Rails = Grails
Instalação
Primeiros comandos
Padrão de projetos
  Domain Classes
  Controllers e Views
Validações...
Grails
    Instalação
                            
    Download do arquivo grails.a.b.c.zip
    Descopactar e declarar a v...
Grails
    Instalação
                                     
    Download do arquivo grails.a.b.c.zip
    Descopactar e dec...
Grails
Primeiros comandos

$ grails create-app racetrack

$ cd racetrack
$ grails run-app

$ grails war
$ grails clean
Grails
  Primeiros comandos
$ grails create-app racetrack
Welcome to Grails 1.2 - http://grails.org/
Licensed under Apache...
Grails
Primeiros comandos
$ grails [–Dserver.port=9090] run-app
...
Base Directory: /Users/sdavis/web/racetrack
Running sc...
C

    M
                   Grails
V
            Padrão de projetos
C

    M
                   Grails
V
            Padrão de projetos



                         Lembre-se: 
              ...
Grails
Domain Classes
  Definem os elementos da aplicação
     Inscrição para a corrida
     nome, email, pago?
Grails
Domain Classes
   Definem os elementos da aplicação
      Inscrição para a corrida
      nome, email, pago?
 $ grai...
Grails
Domain Classes
   Definem os elementos da aplicação
      Inscrição para a corrida
      nome, email, pago?
 $ grai...
Grails
Domain Classes
     Definem os elementos da aplicação
        Inscrição para a corrida
        nome, email, pago?
 ...
Grails
Domain Classes
   Definem os elementos da aplicação
      Inscrição para a corrida
      nome, email, pago?
 $ grai...
Grails
Domain Classes
   Definem os elementos da aplicação
      Inscrição para a corrida
      nome, email, pago?
 $ grai...
Grails
Domain Classes
   Definem os elementos da aplicação
      Inscrição para a corrida
      nome, email, pago?
       ...
Grails
Domain Classes
    Definem os elementos da aplicação
       Inscrição para a corrida
       nome, email, pago?
    ...
Grails
Domain Classes
 $ grails create-domain-class Corrida
  
 class Corrida {
      String nome
      Date dataIncio
   ...
Grails
Domain Classes
 $ grails create-domain-class Corrida
  
 class Corrida {
      String nome
      Date dataIncio
   ...
Grails
Controllers e Views
 $ grails create-controller Corrida
 $ grails generate-views
Grails
Controllers e Views
                                      class CorridaController {
 $ grails create-controller Cor...
Grails
Controllers e Views

scaffold: gera uma aplicação inteira para uma
determinada classe de domínio, incluindo:
      ...
Grails
Controllers e Views

scaffold: gera uma aplicação inteira para uma
determinada classe de domínio, incluindo:
      ...
Grails
Grails
     Validações
1.   Apenas inscrições de estados próximos
2.   O custo não pode ser maior que 100
3.   Toda corrid...
Grails
     Validações
1.   Apenas inscrições de estados próximos
2.   O custo não pode ser maior que 100
3.   Toda corrid...
Grails
Validações

   email     crediCard     password
   inList    matches       min, max

   range     minSize,      not...
Grails
    Validações
        Personalizando Mensagens
 
    no arquivo: i18n/messages.properties
Grails
    Validações
        Personalizando Mensagens
 
    no arquivo: i18n/messages.properties
 
    corrida.nome.blank...
Grails
    Validações
        Personalizando Mensagens
 
    no arquivo: i18n/messages.properties
 
    corrida.nome.blank...
Grails
Relacionamentos
  Uma corrida tem muitas inscrições 
   1 x N

  class Corrida {
    .....
    static hasMany = [in...
Grails
Relacionamentos
   Uma corrida tem muitas inscrições 
    1 x N

 class Corrida {
   .....
   static hasMany = [ins...
Grails
Relacionamentos
   Uma corrida tem muitas inscrições 
    1 x N

 class Corrida {
   .....
   static hasMany = [ins...
Grails
Grails ORM
Nenhuma necessidade de configuração
DAOS?
Grails
    Grails ORM
    Nenhuma necessidade de configuração
    DAOS?
 
    Dynamic domain class methods
Grails
    Grails ORM
    Nenhuma necessidade de configuração
    DAOS?
 
    Dynamic domain class methods

              ...
Grails
    Grails ORM
    Nenhuma necessidade de configuração
    DAOS?
 
    DBVisualizer: Conectar na base do Grails
Dicas


   grails.org
grailsbrasil.com
Dúvidas
Grails from scratch




       Gustavo Pinto
     gustavopinto.org
 twitter.com/gustavopinto
Upcoming SlideShare
Loading in...5
×

Grails from scratch

2,200

Published on

Tutorial básico sobre grails

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,200
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
23
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Grails from scratch

  1. 1. Grails from scratch Gustavo Pinto gustavopinto.org twitter.com/gustavopinto
  2. 2. Agenda Introdução Modelos ágeis Groovy Hands on Grails Da instalação à aplicação Dicas
  3. 3. Introdução Modelos ágeis Processos,  técnicas, ferramentas, whatever   O que é ser ágil?   Porque precisamos ser ágeis?    Duas coisas que influenciam na agilidade A atitude dos membros da equipe As ferramentas
  4. 4. Introdução Necessidades básicas D.R.Y principle convention-over-configuration Lightweight
  5. 5. Introdução D.R.Y principle ? convention-over-configuration ? lightweight ?   O Que usar?
  6. 6. Introdução D.R.Y principle ? convention-over-configuration ? lightweight ? GRAILS
  7. 7. Introdução D.R.Y principle ? convention-over-configuration ? lightweight ? GRAILS
  8. 8. Groovy Linguagem OO baseada no Java Mas com boas idéias de outras linguagens Ruby, Python Roda na JVM Tipagem dinâmica Onde tudo é objeto Pode ser usada como script  Sem algumas burocracias do Java  Sintax Familiar 
  9. 9. Groovy Radar de tecnologia - ThoughtWorks
  10. 10. Groovy groovyconsole.appspot.com
  11. 11. Rails
  12. 12. Groovy + Rails = Grails Instalação Primeiros comandos Padrão de projetos Domain Classes Controllers e Views Validações Relacionamentos Grails ORM (GORM) 
  13. 13. Grails Instalação   Download do arquivo grails.a.b.c.zip Descopactar e declarar a variável GRAILS_HOME   Digilte: grails
  14. 14. Grails Instalação   Download do arquivo grails.a.b.c.zip Descopactar e declarar a variável GRAILS_HOME   Digilte: grails gustavo@zeus:~$ grails Welcome to Grails 1.3.2 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: /opt/grails-1.3.2 No script name specified. Use 'grails help' for more info or 'grails interactive' to enter interactive mode
  15. 15. Grails Primeiros comandos $ grails create-app racetrack $ cd racetrack $ grails run-app $ grails war $ grails clean
  16. 16. Grails Primeiros comandos $ grails create-app racetrack Welcome to Grails 1.2 - http://grails.org/ Licensed under Apache Standard License 2.0 Grails home is set to: /opt/grails ... Created Grails Application at /web/racetrack
  17. 17. Grails Primeiros comandos $ grails [–Dserver.port=9090] run-app ... Base Directory: /Users/sdavis/web/racetrack Running script /opt/grails/scripts/RunApp.groovy Environment set to development [mkdir] Created dir: /Users/sdavis/.grails/1.2/projects/racetrack/classes [groovyc] Compiling 6 source files to /Users/sdavis/.grails/1.2/projects/racetrack/classes ... Running Grails application.. Server running. Browse to http://localhost:8080/racetrack
  18. 18. C M            Grails V Padrão de projetos
  19. 19. C M            Grails V Padrão de projetos Lembre-se:  Convention over Configuration
  20. 20. Grails Domain Classes Definem os elementos da aplicação Inscrição para a corrida nome, email, pago?
  21. 21. Grails Domain Classes Definem os elementos da aplicação Inscrição para a corrida nome, email, pago? $ grails create-domain-class Inscricao  
  22. 22. Grails Domain Classes Definem os elementos da aplicação Inscrição para a corrida nome, email, pago? $ grails create-domain-class Inscricao  
  23. 23. Grails Domain Classes Definem os elementos da aplicação Inscrição para a corrida nome, email, pago? $ grails create-domain-class Inscricao   class Inscricao {       String nome       Date dataAniversario            String email       Boolean pago       .... }
  24. 24. Grails Domain Classes Definem os elementos da aplicação Inscrição para a corrida nome, email, pago? $ grails create-domain-class Inscricao   class Inscricao {       ....              dateCreated       lastUpdated       .... }
  25. 25. Grails Domain Classes Definem os elementos da aplicação Inscrição para a corrida nome, email, pago? $ grails create-domain-class Inscricao   class Inscricao {       ....              dateCreated variáveis especiais       lastUpdated       .... }
  26. 26. Grails Domain Classes Definem os elementos da aplicação Inscrição para a corrida nome, email, pago? class Inscricao { $ grails create-domain-class Inscricao     .....       def beforeInsert = { class Inscricao {         // codigo       ....   }            def beforeUpdate = {       dateCreated     }       lastUpdated     def beforeDelete = {       ....     } }     def onLoad = {     } }
  27. 27. Grails Domain Classes Definem os elementos da aplicação Inscrição para a corrida nome, email, pago? class Inscricao {     .....     def beforeInsert = {         // codigo Para saber mais:    } http://grails.org/GORM+-+Mapping+DSL.     def beforeUpdate = {     }     def beforeDelete = {     }     def onLoad = {     } }
  28. 28. Grails Domain Classes $ grails create-domain-class Corrida   class Corrida {      String nome      Date dataIncio      String cidade      String estado      BigDecimal distancia      BigDecimal custo        .... }
  29. 29. Grails Domain Classes $ grails create-domain-class Corrida   class Corrida {      String nome      Date dataIncio      String cidade      String estado      BigDecimal distancia      BigDecimal custo        .... }
  30. 30. Grails Controllers e Views $ grails create-controller Corrida $ grails generate-views
  31. 31. Grails Controllers e Views class CorridaController { $ grails create-controller Corrida     def scaffold = Corrida $ grails generate-views }
  32. 32. Grails Controllers e Views scaffold: gera uma aplicação inteira para uma determinada classe de domínio, incluindo: As views necessárias Controle de ações de um CRUD
  33. 33. Grails Controllers e Views scaffold: gera uma aplicação inteira para uma determinada classe de domínio, incluindo: As views necessárias Controle de ações de um CRUD scaffold: não é o fim, é apenas o começo
  34. 34. Grails
  35. 35. Grails Validações 1. Apenas inscrições de estados próximos 2. O custo não pode ser maior que 100 3. Toda corrida precisa de um nome 4. Não existe distância negativa
  36. 36. Grails Validações 1. Apenas inscrições de estados próximos 2. O custo não pode ser maior que 100 3. Toda corrida precisa de um nome 4. Não existe distância negativa     static constraints = {            nome(blank:false, maxSize:50)            estado(inList:["PA", "AM", "MA", "AC"])            cidade()                       distancia(min:0.0)            custo(min:0.0, max:100.0)     }
  37. 37. Grails Validações email crediCard password inList matches min, max range minSize, notEqual maxSize, size unique url validator
  38. 38. Grails Validações Personalizando Mensagens   no arquivo: i18n/messages.properties
  39. 39. Grails Validações Personalizando Mensagens   no arquivo: i18n/messages.properties   corrida.nome.blank=Por favor, forneça um nome para corrida corrida.nome.maxSize.exceeded=O nome da corrida não pode ser maior que {3} letras
  40. 40. Grails Validações Personalizando Mensagens   no arquivo: i18n/messages.properties   corrida.nome.blank=Por favor, forneça um nome para corrida corrida.nome.maxSize.exceeded=O nome da corrida não pode ser maior que {3} letras classe . objeto . propriedade . [propriedade] = Mensagem
  41. 41. Grails Relacionamentos Uma corrida tem muitas inscrições   1 x N class Corrida {   .....   static hasMany = [inscricao:Inscricao, ....] }
  42. 42. Grails Relacionamentos Uma corrida tem muitas inscrições   1 x N class Corrida {   .....   static hasMany = [inscricao:Inscricao, ....] }   class Inscricao {    ....   static belongsTo = [corrida:Corrida] }
  43. 43. Grails Relacionamentos Uma corrida tem muitas inscrições   1 x N class Corrida {   .....   static hasMany = [inscricao:Inscricao, ....] Força update } e delete em cascata   class Inscricao {    ....   static belongsTo = [corrida:Corrida] }
  44. 44. Grails Grails ORM Nenhuma necessidade de configuração DAOS?
  45. 45. Grails Grails ORM Nenhuma necessidade de configuração DAOS?   Dynamic domain class methods
  46. 46. Grails Grails ORM Nenhuma necessidade de configuração DAOS?   Dynamic domain class methods save findAll delete find get list count etc
  47. 47. Grails Grails ORM Nenhuma necessidade de configuração DAOS?   DBVisualizer: Conectar na base do Grails
  48. 48. Dicas grails.org grailsbrasil.com
  49. 49. Dúvidas
  50. 50. Grails from scratch Gustavo Pinto gustavopinto.org twitter.com/gustavopinto
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×