SlideShare una empresa de Scribd logo
1 de 33
Descargar para leer sin conexión
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

Más contenido relacionado

La actualidad más candente

Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introduçãoJosino Rodrigues
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidRicardo Longa
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Sergio Lima
 
React - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesReact - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesJefferson Mariano de Souza
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Rodrigo Urubatan
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...tdc-globalcode
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações WebRecursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações WebRégis Eduardo Weizenmann Gregol
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonRicardo Longa
 
JS Experience 2017 - React + Redux. Pensando em Redux
JS Experience 2017 - React + Redux. Pensando em ReduxJS Experience 2017 - React + Redux. Pensando em Redux
JS Experience 2017 - React + Redux. Pensando em ReduxiMasters
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoEduardo Mendes
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Julian Cesar
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Renato Groff
 
Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Felipe Mamud
 

La actualidad más candente (20)

Introdução ao vraptor
Introdução ao vraptorIntrodução ao vraptor
Introdução ao vraptor
 
Grails parte 1 - introdução
Grails   parte 1 - introduçãoGrails   parte 1 - introdução
Grails parte 1 - introdução
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
React Native na globo.com
React Native na globo.comReact Native na globo.com
React Native na globo.com
 
Treze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento androidTreze ferramentas/frameworks para desenvolvimento android
Treze ferramentas/frameworks para desenvolvimento android
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
 
Ajax
AjaxAjax
Ajax
 
React - Compartilhando estado entre componentes
React - Compartilhando estado entre componentesReact - Compartilhando estado entre componentes
React - Compartilhando estado entre componentes
 
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015Interfaces ricas com Rails e React.JS @ Rubyconf 2015
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações WebRecursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
Recursos de Escalabilidade e Alta Disponibilidade Para Aplicações Web
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
 
JS Experience 2017 - React + Redux. Pensando em Redux
JS Experience 2017 - React + Redux. Pensando em ReduxJS Experience 2017 - React + Redux. Pensando em Redux
JS Experience 2017 - React + Redux. Pensando em Redux
 
React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
Java Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuraçãoJava Web 2 - Ferramentas e configuração
Java Web 2 - Ferramentas e configuração
 
Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)Desenvolvimento Front end (AngularJS e Bootstrap)
Desenvolvimento Front end (AngularJS e Bootstrap)
 
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
Descomplicando a montagem de ambientes de Testes com Docker - TDC 2018 - São ...
 
Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?Minha aplicação Java vai pra nuvem. E agora?
Minha aplicação Java vai pra nuvem. E agora?
 

Destacado

15º encontro de gerenciamento de projetos #15 egp - Metodologia ágil a favo...
15º encontro de gerenciamento de projetos   #15 egp - Metodologia ágil a favo...15º encontro de gerenciamento de projetos   #15 egp - Metodologia ágil a favo...
15º encontro de gerenciamento de projetos #15 egp - Metodologia ágil a favo...Thiago Dieb
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascriptLucas Aquiles
 
Drupal: Muito mais que um CMS
Drupal: Muito mais que um CMSDrupal: Muito mais que um CMS
Drupal: Muito mais que um CMSLuiz Filho
 
Criando app mobile com Google Android - Software Freedom Day 2015
Criando app mobile com Google Android - Software Freedom Day 2015 Criando app mobile com Google Android - Software Freedom Day 2015
Criando app mobile com Google Android - Software Freedom Day 2015 Lucas Aquiles
 
google maps api - v1
 google maps api - v1 google maps api - v1
google maps api - v1Lucas Aquiles
 
Testing Grails Applications With Selenium Rc
Testing Grails Applications With Selenium RcTesting Grails Applications With Selenium Rc
Testing Grails Applications With Selenium RcRobert Fletcher
 

Destacado (7)

15º encontro de gerenciamento de projetos #15 egp - Metodologia ágil a favo...
15º encontro de gerenciamento de projetos   #15 egp - Metodologia ágil a favo...15º encontro de gerenciamento de projetos   #15 egp - Metodologia ágil a favo...
15º encontro de gerenciamento de projetos #15 egp - Metodologia ágil a favo...
 
Minicurso javascript
Minicurso javascriptMinicurso javascript
Minicurso javascript
 
Drupal: Muito mais que um CMS
Drupal: Muito mais que um CMSDrupal: Muito mais que um CMS
Drupal: Muito mais que um CMS
 
Criando app mobile com Google Android - Software Freedom Day 2015
Criando app mobile com Google Android - Software Freedom Day 2015 Criando app mobile com Google Android - Software Freedom Day 2015
Criando app mobile com Google Android - Software Freedom Day 2015
 
google maps api - v1
 google maps api - v1 google maps api - v1
google maps api - v1
 
Testing Grails Applications With Selenium Rc
Testing Grails Applications With Selenium RcTesting Grails Applications With Selenium Rc
Testing Grails Applications With Selenium Rc
 
Phonegap
PhonegapPhonegap
Phonegap
 

Similar a Grails

Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Maurício Linhares
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifaguestea329c
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Alex Guido
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraDavid O'Keefe
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoGuilhermeJorgeAragod
 
Campus Party 2014 - Desenvolvimento Web com ASP.NET
Campus Party 2014 - Desenvolvimento Web com ASP.NETCampus Party 2014 - Desenvolvimento Web com ASP.NET
Campus Party 2014 - Desenvolvimento Web com ASP.NETEduardo Pires
 
Orientação a objetos da teoria a prática em java
Orientação a objetos   da teoria a prática em java Orientação a objetos   da teoria a prática em java
Orientação a objetos da teoria a prática em java Fabiano Lima
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptAndre Baltieri
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_jsgustavobeavis
 
Orientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a PraticaOrientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a Praticaelliando dias
 
Orientacao A Objetos Da Teoria A Pratica Em Java
Orientacao A Objetos   Da Teoria A Pratica Em JavaOrientacao A Objetos   Da Teoria A Pratica Em Java
Orientacao A Objetos Da Teoria A Pratica Em Javaelliando dias
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2Felipe Pimentel
 

Similar a Grails (20)

Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Lampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 PalestraLampada Php Conference Brasil 2007 Palestra
Lampada Php Conference Brasil 2007 Palestra
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
 
ApresentaçãO Mvc
ApresentaçãO MvcApresentaçãO Mvc
ApresentaçãO Mvc
 
Apresentação M V C
Apresentação M V CApresentação M V C
Apresentação M V C
 
Cloudformation
CloudformationCloudformation
Cloudformation
 
Campus Party 2014 - Desenvolvimento Web com ASP.NET
Campus Party 2014 - Desenvolvimento Web com ASP.NETCampus Party 2014 - Desenvolvimento Web com ASP.NET
Campus Party 2014 - Desenvolvimento Web com ASP.NET
 
Orientação a objetos da teoria a prática em java
Orientação a objetos   da teoria a prática em java Orientação a objetos   da teoria a prática em java
Orientação a objetos da teoria a prática em java
 
Criando APIs com Node e TypeScript
Criando APIs com Node e TypeScriptCriando APIs com Node e TypeScript
Criando APIs com Node e TypeScript
 
Grails
GrailsGrails
Grails
 
Indo alem do_mvc_node_js
Indo alem do_mvc_node_jsIndo alem do_mvc_node_js
Indo alem do_mvc_node_js
 
Orientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a PraticaOrientação a Objetos - Da Teoria a Pratica
Orientação a Objetos - Da Teoria a Pratica
 
Orientacao A Objetos Da Teoria A Pratica Em Java
Orientacao A Objetos   Da Teoria A Pratica Em JavaOrientacao A Objetos   Da Teoria A Pratica Em Java
Orientacao A Objetos Da Teoria A Pratica Em Java
 
Grails
GrailsGrails
Grails
 
[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2[CLPE] Novidades do Asp.net mvc 2
[CLPE] Novidades do Asp.net mvc 2
 

Más de Lucas Aquiles

Best practices in pair programming
Best practices in pair programmingBest practices in pair programming
Best practices in pair programmingLucas Aquiles
 
Pocket Talk - Onde vivem os vegans?
Pocket Talk - Onde vivem os vegans?Pocket Talk - Onde vivem os vegans?
Pocket Talk - Onde vivem os vegans?Lucas Aquiles
 
Pocket Talk - Mob programming
Pocket Talk - Mob programmingPocket Talk - Mob programming
Pocket Talk - Mob programmingLucas Aquiles
 
Desenvolvimento de aplicações para a plataforma google android
Desenvolvimento de aplicações para a plataforma google androidDesenvolvimento de aplicações para a plataforma google android
Desenvolvimento de aplicações para a plataforma google androidLucas Aquiles
 

Más de Lucas Aquiles (8)

Open talk micronaut
Open talk   micronautOpen talk   micronaut
Open talk micronaut
 
Best practices in pair programming
Best practices in pair programmingBest practices in pair programming
Best practices in pair programming
 
Pocket Talk - Onde vivem os vegans?
Pocket Talk - Onde vivem os vegans?Pocket Talk - Onde vivem os vegans?
Pocket Talk - Onde vivem os vegans?
 
Pocket Talk - Mob programming
Pocket Talk - Mob programmingPocket Talk - Mob programming
Pocket Talk - Mob programming
 
Groovy
GroovyGroovy
Groovy
 
Groovy
GroovyGroovy
Groovy
 
Desenvolvimento de aplicações para a plataforma google android
Desenvolvimento de aplicações para a plataforma google androidDesenvolvimento de aplicações para a plataforma google android
Desenvolvimento de aplicações para a plataforma google android
 
Orm android
Orm androidOrm android
Orm android
 

Grails

  • 1. Introdução ao Grails Conceitos bá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 algum problema 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 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
  • 11. 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
  • 12. 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
  • 13. Persistência - GORM Buscadores dinâ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 Suporte a criteria API def criteria = createCriteria(); def resultado = criteria.list(){ categoria{eq(2)} order “nome” } @lucas_aquiles
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. O C do MVC R e d i r e c t : redireciona para algum lugar Parâmetros: action controller URI params @lucas_aquiles
  • 22. 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
  • 23. 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
  • 24. Service Transactions Essencial para manter a integridade do banco de dados seguindo os conceitos de ACID: Atomicidade Consistência Isolação Durabilidade @lucas_aquiles
  • 25. 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
  • 26. 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
  • 27. 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
  • 28. 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
  • 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 de GrailsUnitTestCase 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] grails install-plugin [local-do-plugin] grails create-plugin @lucas_aquiles
  • 33. Duvidas? @lucas_aquiles