Download - Grails from scratch

Transcript
Page 1: Grails from scratch

Grails from scratch

Gustavo Pintogustavopinto.org

twitter.com/gustavopinto

Page 2: Grails from scratch

AgendaIntrodução

Modelos ágeis Groovy

Hands on Grails

Da instalação à aplicaçãoDicas

Page 3: Grails from scratch

IntroduçãoModelos ágeis

Processos,  técnicas, ferramentas, whatever 

O que é ser ágil? 

Porque precisamos ser ágeis?  

Duas coisas que influenciam na agilidadeA atitude dos membros da equipe As ferramentas

Page 4: Grails from scratch

IntroduçãoNecessidades básicas

D.R.Y principleconvention-over-configurationLightweight

Page 5: Grails from scratch

IntroduçãoD.R.Y principle ?convention-over-configuration ?lightweight ?

  O Que usar?

Page 6: Grails from scratch

IntroduçãoD.R.Y principle ?convention-over-configuration ?lightweight ?

GRAILS

Page 7: Grails from scratch

IntroduçãoD.R.Y principle ?convention-over-configuration ?lightweight ?

GRAILS

Page 8: Grails from scratch

GroovyLinguagem OO baseada no JavaMas com boas idéias de outras linguagens

Ruby, Python Roda na JVMTipagem dinâmicaOnde tudo é objetoPode ser usada como script Sem algumas burocracias do Java Sintax Familiar 

Page 9: Grails from scratch

Groovy

Radar de tecnologia - ThoughtWorks

Page 10: Grails from scratch

Groovy

groovyconsole.appspot.com

Page 11: Grails from scratch

Rails

Page 12: Grails from scratch

Groovy + Rails = GrailsInstalaçãoPrimeiros comandosPadrão de projetos

Domain ClassesControllers e Views

ValidaçõesRelacionamentosGrails ORM (GORM) 

Page 13: Grails from scratch

GrailsInstalação

 Download do arquivo grails.a.b.c.zipDescopactar e declarar a variável GRAILS_HOME

  Digilte: grails

Page 14: Grails from scratch

GrailsInstalação

 Download do arquivo grails.a.b.c.zipDescopactar e declarar a variável GRAILS_HOME

 Digilte: grails

gustavo@zeus:~$ grailsWelcome to Grails 1.3.2 - http://grails.org/Licensed under Apache Standard License 2.0Grails 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

Page 15: Grails from scratch

GrailsPrimeiros comandos

$ grails create-app racetrack

$ cd racetrack$ grails run-app

$ grails war$ grails clean

Page 16: Grails from scratch

GrailsPrimeiros comandos

$ grails create-app racetrackWelcome to Grails 1.2 - http://grails.org/Licensed under Apache Standard License 2.0Grails home is set to: /opt/grails...Created Grails Application at /web/racetrack

Page 17: Grails from scratch

GrailsPrimeiros comandos

$ grails [–Dserver.port=9090] run-app...Base Directory: /Users/sdavis/web/racetrackRunning script /opt/grails/scripts/RunApp.groovyEnvironment 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

Page 18: Grails from scratch

           Grails

Padrão de projetos

M

C

V

Page 19: Grails from scratch

           Grails

Padrão de projetos

Lembre-se: Convention over Configuration

M

C

V

Page 20: Grails from scratch

GrailsDomain Classes

Definem os elementos da aplicaçãoInscrição para a corrida nome, email, pago?

Page 21: Grails from scratch

GrailsDomain Classes

Definem os elementos da aplicaçãoInscrição para a corrida nome, email, pago?

$ grails create-domain-class Inscricao 

Page 22: Grails from scratch

GrailsDomain Classes

Definem os elementos da aplicaçãoInscrição para a corrida nome, email, pago?

$ grails create-domain-class Inscricao 

Page 23: Grails from scratch

GrailsDomain Classes

Definem os elementos da aplicaçãoInscrição para a corrida nome, email, pago?

$ grails create-domain-class Inscricao class Inscricao {      String nome      Date dataAniversario            String email      Boolean pago

      ....}

Page 24: Grails from scratch

GrailsDomain Classes

Definem os elementos da aplicaçãoInscrição para a corrida nome, email, pago?

$ grails create-domain-class Inscricao class Inscricao {      ....            dateCreated      lastUpdated      ....}

Page 25: Grails from scratch

GrailsDomain Classes

Definem os elementos da aplicaçãoInscrição para a corrida nome, email, pago?

$ grails create-domain-class Inscricao class Inscricao {      ....            dateCreated      lastUpdated      ....}

variáveis especiais

Page 26: Grails from scratch

GrailsDomain Classes

Definem os elementos da aplicaçãoInscrição para a corrida nome, email, pago?

$ grails create-domain-class Inscricao class Inscricao {      ....            dateCreated      lastUpdated      ....}

class Inscricao {    .....    def beforeInsert = {        // codigo    }    def beforeUpdate = {    }    def beforeDelete = {    }    def onLoad = {    }}

Page 27: Grails from scratch

GrailsDomain Classes

Definem os elementos da aplicaçãoInscrição para a corrida nome, email, pago? class Inscricao {

    .....    def beforeInsert = {        // codigo    }    def beforeUpdate = {    }    def beforeDelete = {    }    def onLoad = {    }}

Para saber mais: http://grails.org/GORM+-+Mapping+DSL.

Page 28: Grails from scratch

GrailsDomain Classes

$ grails create-domain-class Corrida class Corrida {     String nome     Date dataIncio     String cidade     String estado     BigDecimal distancia     BigDecimal custo      ....}

Page 29: Grails from scratch

GrailsDomain Classes

$ grails create-domain-class Corrida class Corrida {     String nome     Date dataIncio     String cidade     String estado     BigDecimal distancia     BigDecimal custo      ....}

Page 30: Grails from scratch

GrailsControllers e Views

$ grails create-controller Corrida$ grails generate-views

Page 31: Grails from scratch

GrailsControllers e Views

$ grails create-controller Corrida$ grails generate-views

class CorridaController {    def scaffold = Corrida}

Page 32: Grails from scratch

GrailsControllers e Views

scaffold: gera uma aplicação inteira para uma determinada classe de domínio, incluindo:

As views necessáriasControle de ações de um CRUD

Page 33: Grails from scratch

GrailsControllers e Views

scaffold: gera uma aplicação inteira para uma determinada classe de domínio, incluindo:

As views necessáriasControle de ações de um CRUD

scaffold: não é o fim, é apenas o começo

Page 34: Grails from scratch

Grails

Page 35: Grails from scratch

GrailsValidações

1. Apenas inscrições de estados próximos2. O custo não pode ser maior que 1003. Toda corrida precisa de um nome4. Não existe distância negativa

Page 36: Grails from scratch

GrailsValidações

1. Apenas inscrições de estados próximos2. O custo não pode ser maior que 1003. Toda corrida precisa de um nome4. 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)    }

Page 37: Grails from scratch

GrailsValidações

email crediCard password

inList matches min, max

range minSize, maxSize, size

notEqual

unique url validator

Page 38: Grails from scratch

GrailsValidações

Personalizando Mensagens 

no arquivo: i18n/messages.properties

Page 39: Grails from scratch

GrailsValidações

Personalizando Mensagens 

no arquivo: i18n/messages.properties 

corrida.nome.blank=Por favor, forneça um nome para corridacorrida.nome.maxSize.exceeded=O nome da corrida não pode ser maior que {3} letras

Page 40: Grails from scratch

GrailsValidações

Personalizando Mensagens 

no arquivo: i18n/messages.properties 

corrida.nome.blank=Por favor, forneça um nome para corridacorrida.nome.maxSize.exceeded=O nome da corrida não pode ser maior que {3} letras

classe . objeto . propriedade . [propriedade] = Mensagem

Page 41: Grails from scratch

GrailsRelacionamentos

Uma corrida tem muitas inscrições  1 x N

class Corrida {  .....   static hasMany = [inscricao:Inscricao, ....]}

Page 42: Grails from scratch

GrailsRelacionamentos

Uma corrida tem muitas inscrições  1 x N

class Corrida {  .....   static hasMany = [inscricao:Inscricao, ....]}

 class Inscricao {   ....  static belongsTo = [corrida:Corrida]}

Page 43: Grails from scratch

GrailsRelacionamentos

Uma corrida tem muitas inscrições  1 x N

class Corrida {  .....   static hasMany = [inscricao:Inscricao, ....]}

 class Inscricao {   ....  static belongsTo = [corrida:Corrida]}

Força updatee delete em cascata

Page 44: Grails from scratch

GrailsGrails ORMNenhuma necessidade de configuraçãoDAOS?

Page 45: Grails from scratch

GrailsGrails ORMNenhuma necessidade de configuraçãoDAOS?

 Dynamic domain class methods

Page 46: Grails from scratch

GrailsGrails ORMNenhuma necessidade de configuraçãoDAOS?

 Dynamic domain class methods

save findAlldelete find

get listcount etc

Page 47: Grails from scratch

GrailsGrails ORMNenhuma necessidade de configuraçãoDAOS?

 DBVisualizer: Conectar na base do Grails

Page 48: Grails from scratch

Dicas

grails.orggrailsbrasil.com

Page 49: Grails from scratch

Dúvidas

Page 50: Grails from scratch

Grails from scratch

Gustavo Pintogustavopinto.org

twitter.com/gustavopinto


Top Related