Grails from scratch

Post on 27-May-2015

2.195 views 3 download

description

Tutorial básico sobre grails

Transcript of Grails from scratch

Grails from scratch

Gustavo Pintogustavopinto.org

twitter.com/gustavopinto

AgendaIntrodução

Modelos ágeis Groovy

Hands on Grails

Da instalação à aplicaçãoDicas

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

IntroduçãoNecessidades básicas

D.R.Y principleconvention-over-configurationLightweight

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

  O Que usar?

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

GRAILS

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

GRAILS

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 

Groovy

Radar de tecnologia - ThoughtWorks

Groovy

groovyconsole.appspot.com

Rails

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

Domain ClassesControllers e Views

ValidaçõesRelacionamentosGrails ORM (GORM) 

GrailsInstalação

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

  Digilte: grails

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

GrailsPrimeiros comandos

$ grails create-app racetrack

$ cd racetrack$ grails run-app

$ grails war$ grails clean

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

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

           Grails

Padrão de projetos

M

C

V

           Grails

Padrão de projetos

Lembre-se: Convention over Configuration

M

C

V

GrailsDomain Classes

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

GrailsDomain Classes

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

$ grails create-domain-class Inscricao 

GrailsDomain Classes

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

$ grails create-domain-class Inscricao 

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

      ....}

GrailsDomain Classes

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

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

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

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 = {    }}

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.

GrailsDomain Classes

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

GrailsDomain Classes

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

GrailsControllers e Views

$ grails create-controller Corrida$ grails generate-views

GrailsControllers e Views

$ grails create-controller Corrida$ grails generate-views

class CorridaController {    def scaffold = Corrida}

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

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

Grails

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

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)    }

GrailsValidações

email crediCard password

inList matches min, max

range minSize, maxSize, size

notEqual

unique url validator

GrailsValidações

Personalizando Mensagens 

no arquivo: i18n/messages.properties

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

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

GrailsRelacionamentos

Uma corrida tem muitas inscrições  1 x N

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

GrailsRelacionamentos

Uma corrida tem muitas inscrições  1 x N

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

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

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

GrailsGrails ORMNenhuma necessidade de configuraçãoDAOS?

GrailsGrails ORMNenhuma necessidade de configuraçãoDAOS?

 Dynamic domain class methods

GrailsGrails ORMNenhuma necessidade de configuraçãoDAOS?

 Dynamic domain class methods

save findAlldelete find

get listcount etc

GrailsGrails ORMNenhuma necessidade de configuraçãoDAOS?

 DBVisualizer: Conectar na base do Grails

Dicas

grails.orggrailsbrasil.com

Dúvidas

Grails from scratch

Gustavo Pintogustavopinto.org

twitter.com/gustavopinto