Introdução ao Grails
Conceitos básicos do Grails Framework e ZK



             @Lucas_Aquiles


                  @lucas_aquiles
Roteiro

O que é Grails?
Primeiro Projeto
O M do MVC
Persistência – GORM
Relacionamentos
              @lucas_aquiles
O que é Grails
Problemas comuns
  Quando você começa um novo projeto você tem
   que configurar tudo:
    Construir todos os componentes
    Configurar arquivos xml
    Mapear com o ORM manualmente
    É dificil escrever uma view limpa
    Tag libs eram sempre dolorosas


                          @lucas_aquiles
E quando algum problema
aparecia...




             @lucas_aquiles
O que é Grails



                     =

                         +


                 @lucas_aquiles
O que é Grails
Framework baseada no MVC
Segue boas praticas popularizadas pelo Rails
  CoC
  DRY
Construído sobre gigantes
  S p r i n g : IoC, DI, Spring MVC, Spring WebFlow
  H i b e r n a t e :ORM

                           @lucas_aquiles
O que é Grails
Instalação e Configuração
  Download da ultima versão do grails
    grails.org/Downloads
  Descompacte em algum lugar
  Crie o GRAILS_HOME
  Adicione $GRAILS_HOME/bin no PATH


  Pronto!
                           @lucas_aquiles
O que Grails

Cadê os arquivos de config?
Cadê meus DAOs?
 E os mapeamentos?
Sem banco pra configurar?
Sem servlet container ou
App server pra instalar?




                              @lucas_aquiles
O que é Grails                     DataSource.groovy

                                   Config.groovy

                                   Bootstrap.groovy

                                   URLMapping.groovy




                                  web.xml


                 @lucas_aquiles
O M do MVC
Toda entidade persistente fica aqui
São mapeadas de maneira transparente
Model são configurados como POGOs
Cada classe de domínio corresponde a uma
 tabela no banco de dados relacional


comando: grails create-domain-class P erson
                       @lucas_aquiles
O M do MVC
É uma classe Groovy normal
Constraints
  Valida a entrada dos campos
  Você pode criar sua própria constraints
  blank, creditcard, email, url, nullable, unique




                            @lucas_aquiles
Persistência - GORM
Utiliza o Hibernate por baixo dos panos
Para cada classe de domínio é injetado os
 métodos do GORM
  produto.save(), P roduto.list(), P roduto.get(id)
  produto.count(), produto.delete(), etc...

Buscadores dinâmicos
  P roduto.findB yP reco(2.0)

                               @lucas_aquiles
Persistência - GORM
Buscadores dinâmicos




FindBy*, FindAllBy*
FindWhere*, findAllWhere*
                      @lucas_aquiles
Persistência - GORM
HQL – Hibernate Query Language
  Produto.find(“from Produto where preco = :preco
    and nome like :nome”, [preco:2.0, nome:'nome do
    produto'])
  Parâmetros:
    max, sort, order




                       @lucas_aquiles
Persistência - GORM
Comparadores
 Like
    Produto.findByNomeLike(“%test”)
 LessThan
    Produto.findByPrecoLessThan(2.0)
 IsNotNull
    Produto.findByCategoriaIsNotNull()
  NotEqual

                         @lucas_aquiles
Persistência - GORM
Suporte a criteria API
  def criteria = createCriteria();
  def resultado = criteria.list(){
         categoria{eq(2)}
        order “nome”
    }




                          @lucas_aquiles
Relacionamentos
Permite 4 tipos de relacionamentos
  One-to-one, one-to-many, many-to-many, many-to-
   one
  OneToMany
    Player hasOne Team
  HasMany
    Team hasMany Players
       Métodos dinâmicos:


                            @lucas_aquiles
Relacionamentos
Em relacionamentos manyT oM any um dos lados
 da relação deve definir o belongsT o
Mapping
  I nsertable
     Inserida dinamicamente quando uma instancia for salva
  C ascade
     Configura ações em cascada entre a associação
  U pdatable
                         @lucas_aquiles
O C do MVC
Toda regra de negócio é chamada a partir daqui
A c t i o n s : são clousures que vão receber
  requisições e fazer alguma coisa
H ttpServletR equest e H ttpServletR esponse
p a r a m s : váriavel,map, injetado
  dinamicamente em todo controller que contêm
  os parametros da requisição

                        @lucas_aquiles
O C do MVC
R e n d e r : renderiza uma resposta
  Uma view, um texto, um template
  Parâmetros
    view
    template
    model
    text
    var


                      @lucas_aquiles
O C do MVC
R e d i r e c t : redireciona para algum lugar
  Parâmetros:
     action
     controller
     URI
     params




                      @lucas_aquiles
O C do MVC
A variável scaffolding
  Permite criar a estrutura CRUD dinâmica para uma
   classe de domínio
  def scaffolding = P roduto


  *Scaffolding não é a solução final!




                           @lucas_aquiles
Service
Centraliza a regra de negócio
Compartilha a mesma regra de negócio com a
 classe de domínio
É injetado automaticamente no controller pelo
 Spring
C omando: grails create-service ServiceN ame



                         @lucas_aquiles
Service
Transactions
Essencial para manter a integridade do banco
 de dados seguindo os conceitos de ACID:
  Atomicidade
  Consistência
  Isolação
  Durabilidade

                    @lucas_aquiles
O V do MVC
Comando grails-generate-views D omainN ame
Arquivos .gsp
Baseados em taglibs
  Evitam misturar codigo de programação com código
   de marcação
  Semelhante ao JSP
     <%= produto.nome %>


                       @lucas_aquiles
O V do MVC
Loops
 Each
    Parâmetros
           in: lista que será iterada
           var: variável temporária, padrão it

 If/else
    Parâmetros
           test: recebe a condição a ser testada

 Set
                                  @lucas_aquiles
Scaffolding
Comando: grails generate-all D omainN ame
  Cria toda o controller e views com a estrutura de
    CRUD
  Ótimo para prototipação
  Scaffolding dinâmico: injetado no controller, recebe
   como valor a classe de domínio




                        @lucas_aquiles
TDD – Test Driven Development
Integrado com o jUnit
Toda classe de teste extende GroovyTestCase
Permite fazer testes:
  Unitários
  De integração
  Funcionais
Semelhante aos testes em Java
                        @lucas_aquiles
TDD
UnitTest != IntegrationTest
  Testes unitários verificam um objeto isolado, não há
    necessidade de conexão com banco, web sercce
    ou outro compomente.
  Testes de integração integrar um objeto a ser
    testado com componentes externos




                       @lucas_aquiles
TDD
mockDomain
 Herdado de GrailsUnitTestCase
 Injeta na classe de domínio que a classe deve ter
   Validate(), save(), delete()




                          @lucas_aquiles
TDD
Testes em Controllers
  mockP arams: funciona como os params do controller
  controller: identifica um controller
  R edirectA rgs: possui os parametros:
     A ction, controller, model
  M ockR equest: simula uma instancia para
   HttpServletRequest
  M ockSession: simula uma HttpSession
                                  @lucas_aquiles
Plugins
grails install-plugin [plugin-name]
grails install-plugin [local-do-plugin]


grails create-plugin




                         @lucas_aquiles
Duvidas?




           @lucas_aquiles

Grails

  • 1.
    Introdução ao Grails Conceitosbásicos do Grails Framework e ZK @Lucas_Aquiles @lucas_aquiles
  • 2.
    Roteiro O que éGrails? Primeiro Projeto O M do MVC Persistência – GORM Relacionamentos @lucas_aquiles
  • 3.
    O que éGrails Problemas comuns Quando você começa um novo projeto você tem que configurar tudo: Construir todos os componentes Configurar arquivos xml Mapear com o ORM manualmente É dificil escrever uma view limpa Tag libs eram sempre dolorosas @lucas_aquiles
  • 4.
    E quando algumproblema aparecia... @lucas_aquiles
  • 5.
    O que éGrails = + @lucas_aquiles
  • 6.
    O que éGrails Framework baseada no MVC Segue boas praticas popularizadas pelo Rails CoC DRY Construído sobre gigantes S p r i n g : IoC, DI, Spring MVC, Spring WebFlow H i b e r n a t e :ORM @lucas_aquiles
  • 7.
    O que éGrails Instalação e Configuração Download da ultima versão do grails grails.org/Downloads Descompacte em algum lugar Crie o GRAILS_HOME Adicione $GRAILS_HOME/bin no PATH Pronto! @lucas_aquiles
  • 8.
    O que Grails Cadêos arquivos de config? Cadê meus DAOs? E os mapeamentos? Sem banco pra configurar? Sem servlet container ou App server pra instalar? @lucas_aquiles
  • 9.
    O que éGrails DataSource.groovy Config.groovy Bootstrap.groovy URLMapping.groovy web.xml @lucas_aquiles
  • 10.
    O M doMVC Toda entidade persistente fica aqui São mapeadas de maneira transparente Model são configurados como POGOs Cada classe de domínio corresponde a uma tabela no banco de dados relacional comando: grails create-domain-class P erson @lucas_aquiles
  • 11.
    O M doMVC É uma classe Groovy normal Constraints Valida a entrada dos campos Você pode criar sua própria constraints blank, creditcard, email, url, nullable, unique @lucas_aquiles
  • 12.
    Persistência - GORM Utilizao Hibernate por baixo dos panos Para cada classe de domínio é injetado os métodos do GORM produto.save(), P roduto.list(), P roduto.get(id) produto.count(), produto.delete(), etc... Buscadores dinâmicos P roduto.findB yP reco(2.0) @lucas_aquiles
  • 13.
    Persistência - GORM Buscadoresdinâmicos FindBy*, FindAllBy* FindWhere*, findAllWhere* @lucas_aquiles
  • 14.
    Persistência - GORM HQL– Hibernate Query Language Produto.find(“from Produto where preco = :preco and nome like :nome”, [preco:2.0, nome:'nome do produto']) Parâmetros: max, sort, order @lucas_aquiles
  • 15.
    Persistência - GORM Comparadores Like Produto.findByNomeLike(“%test”) LessThan Produto.findByPrecoLessThan(2.0) IsNotNull Produto.findByCategoriaIsNotNull() NotEqual @lucas_aquiles
  • 16.
    Persistência - GORM Suportea criteria API def criteria = createCriteria(); def resultado = criteria.list(){ categoria{eq(2)} order “nome” } @lucas_aquiles
  • 17.
    Relacionamentos Permite 4 tiposde relacionamentos One-to-one, one-to-many, many-to-many, many-to- one OneToMany Player hasOne Team HasMany Team hasMany Players Métodos dinâmicos: @lucas_aquiles
  • 18.
    Relacionamentos Em relacionamentos manyToM any um dos lados da relação deve definir o belongsT o Mapping I nsertable Inserida dinamicamente quando uma instancia for salva C ascade Configura ações em cascada entre a associação U pdatable @lucas_aquiles
  • 19.
    O C doMVC Toda regra de negócio é chamada a partir daqui A c t i o n s : são clousures que vão receber requisições e fazer alguma coisa H ttpServletR equest e H ttpServletR esponse p a r a m s : váriavel,map, injetado dinamicamente em todo controller que contêm os parametros da requisição @lucas_aquiles
  • 20.
    O C doMVC R e n d e r : renderiza uma resposta Uma view, um texto, um template Parâmetros view template model text var @lucas_aquiles
  • 21.
    O C doMVC R e d i r e c t : redireciona para algum lugar Parâmetros: action controller URI params @lucas_aquiles
  • 22.
    O C doMVC A variável scaffolding Permite criar a estrutura CRUD dinâmica para uma classe de domínio def scaffolding = P roduto *Scaffolding não é a solução final! @lucas_aquiles
  • 23.
    Service Centraliza a regrade negócio Compartilha a mesma regra de negócio com a classe de domínio É injetado automaticamente no controller pelo Spring C omando: grails create-service ServiceN ame @lucas_aquiles
  • 24.
    Service Transactions Essencial para mantera integridade do banco de dados seguindo os conceitos de ACID: Atomicidade Consistência Isolação Durabilidade @lucas_aquiles
  • 25.
    O V doMVC Comando grails-generate-views D omainN ame Arquivos .gsp Baseados em taglibs Evitam misturar codigo de programação com código de marcação Semelhante ao JSP <%= produto.nome %> @lucas_aquiles
  • 26.
    O V doMVC Loops Each Parâmetros in: lista que será iterada var: variável temporária, padrão it If/else Parâmetros test: recebe a condição a ser testada Set @lucas_aquiles
  • 27.
    Scaffolding Comando: grails generate-allD omainN ame Cria toda o controller e views com a estrutura de CRUD Ótimo para prototipação Scaffolding dinâmico: injetado no controller, recebe como valor a classe de domínio @lucas_aquiles
  • 28.
    TDD – TestDriven Development Integrado com o jUnit Toda classe de teste extende GroovyTestCase Permite fazer testes: Unitários De integração Funcionais Semelhante aos testes em Java @lucas_aquiles
  • 29.
    TDD UnitTest != IntegrationTest Testes unitários verificam um objeto isolado, não há necessidade de conexão com banco, web sercce ou outro compomente. Testes de integração integrar um objeto a ser testado com componentes externos @lucas_aquiles
  • 30.
    TDD mockDomain Herdado deGrailsUnitTestCase Injeta na classe de domínio que a classe deve ter Validate(), save(), delete() @lucas_aquiles
  • 31.
    TDD Testes em Controllers mockP arams: funciona como os params do controller controller: identifica um controller R edirectA rgs: possui os parametros: A ction, controller, model M ockR equest: simula uma instancia para HttpServletRequest M ockSession: simula uma HttpSession @lucas_aquiles
  • 32.
    Plugins grails install-plugin [plugin-name] grailsinstall-plugin [local-do-plugin] grails create-plugin @lucas_aquiles
  • 33.
    Duvidas? @lucas_aquiles