SlideShare uma empresa Scribd logo
O “Santo Graal” do
                                  desenvolvimento Web!




                                              Natã Melo
                                   (nata.venancio.melo@gmail.com)
                                          Créditos: Diego Cavalcanti




quarta-feira, 9 de maio de 2012
quarta-feira, 9 de maio de 2012
Olhando o passado
quarta-feira, 9 de maio de 2012
• Perda de tempo para criar
                                  ambiente de desenvolvimento ...
                             • ... e para configurar uma aplicação



                                  Olhando o passado
quarta-feira, 9 de maio de 2012
• Muitas tarefas repetitivas
                                    executadas manualmente
                                  • Muito tempo para aprender
                                    tecnologias (Spring, Hibernate,
                                    JSF, etc)



                                   Olhando o passado
quarta-feira, 9 de maio de 2012
• Baixa produtividade no
                                   desenvolvimento Web




                                  Olhando o passado
quarta-feira, 9 de maio de 2012
Resultado...




quarta-feira, 9 de maio de 2012
Temos
               solução
              para esses
             problemas?



quarta-feira, 9 de maio de 2012
Ruby on Rails


                                  CoC: Convention over
                                     Configuration



                                   DRY: Don’t Repeat
                                       Yourself



quarta-feira, 9 de maio de 2012
Ruby on Rails


                                  Stack Completo




                                  Expansibilidade




quarta-feira, 9 de maio de 2012
E por que não Ruby on Rails?


                          O investimento feito
                            na equipe e nas
                         ferramentas com Java
                             não deve se
                                perder!




quarta-feira, 9 de maio de 2012
Desenvolvimento Web
                                  <<Rápido e com qualidade>>




quarta-feira, 9 de maio de 2012
Framework baseado em MVC
                       para desenvolvimento web
                         com alta produtividade




quarta-feira, 9 de maio de 2012
Padrão MVC




quarta-feira, 9 de maio de 2012
quarta-feira, 9 de maio de 2012
•Spring
          •Hibernate
          •Groovy
          •Java
          •SiteMesh
          •Jetty
          •Apache Ant

quarta-feira, 9 de maio de 2012
Integração simples com o banco de dados

                        Hibernate transparente para o programador




                                                  +

quarta-feira, 9 de maio de 2012
Arquitetura Grails




quarta-feira, 9 de maio de 2012
Casos de sucesso
                                             Em 2007, eram
                                        7 mil downloads por mês.


                                      Em 2008, passou para
                                            70 mil!

                                        Mantém a média
                                         atualmente!

quarta-feira, 9 de maio de 2012
Casos de sucesso



                                       + 150 milhões de usuários




quarta-feira, 9 de maio de 2012
Casos de sucesso




                                         + 1 bilhão de páginas
                                          acessadas por mês




quarta-feira, 9 de maio de 2012
quarta-feira, 9 de maio de 2012
Comunidade vibrante




                                  • http://grails.markmail.org/
                                  • + de 200.000 mensagens
                                  • Em média 54 mensagens por dia
quarta-feira, 9 de maio de 2012
Pausa para alguns
                                      conceitos


quarta-feira, 9 de maio de 2012
Linguagem dinâmica e ágil para JVM



                                            Java com esteróides

                                    Todo o poder de Java mas com recursos
                                  poderosos emprestados de outras linguagens



                                  Integração com objetos e bibliotecas Java


quarta-feira, 9 de maio de 2012
public class Minicurso {
                    	

                    	

 private String titulo;
                    	

                    	

 public Minicurso (String titulo){
                    	

 	

 this.titulo = titulo;
                    	

 }

                    	

    public String getTitulo() {
                    	

    	

 return titulo;
                    	

    }

                    	

    public void setTitulo(String titulo) {
                    	

    	

 this.titulo = titulo;
                    	

    }
                    	

                    	

    public String getMensagem (){
                    	

    	

 return "Título do Minicurso: " + this.titulo;
                    	

    }
                    }




quarta-feira, 9 de maio de 2012
public class Minicurso {
                  	

                  	

 private String titulo;
                  	

                  	

 public Minicurso (String titulo){
                  	

 	

 this.titulo = titulo;
                  	

 }

                  	

   public String getTitulo() {
                  	

   	

 return titulo;
                  	

   }

                  	

   public void setTitulo(String titulo) {
                  	

   	

 this.titulo = titulo;
                  	

   }
                  	

                  	

   public String getMensagem (){
                  	

   	

 return "Título do Minicurso: " + this.titulo;
                  	

   }

                  }



quarta-feira, 9 de maio de 2012
E os esteróides?




quarta-feira, 9 de maio de 2012
“Groovyficando”
                                     o código
                                      class Minicurso {

                                   	

 def titulo

                                   	

 def getMensagem (){
                                   	

 	

 "Título do Minicurso: ${titulo}"
                                   	

 }
                                   }

                                   miniCurso = new Minicurso (titulo = "Grails")
                                   miniCurso.getMessagem ()




quarta-feira, 9 de maio de 2012
Mais facilidades...
                                    Null Checking
                                          if (obj != null)
                                      	

 	

 ...


                                               if (obj)
                                                    ...




quarta-feira, 9 de maio de 2012
Mais facilidades...
                                    Null Checking

                                        Object obj = new Object ();
                                    String str = "Valor do objeto: " + obj == null ?
                                    "null" : obj.toString();




                                    Object obj = new Object()
                                    String str = "Valor do objeto ${obj?.toString()}"




quarta-feira, 9 de maio de 2012
Mais facilidades...
                                      Mapas
                                         import java.util.HashMap;
                                         import java.util.Map;

                                          Map m = new HashMap();
                                          m.put("br", "Brasil");
                                          m.put("us", "USA");



                                       m = [br:"Brasil", us:"USA"]




quarta-feira, 9 de maio de 2012
Mais facilidades...
                                                Looping
                                              for (int i = 0; i < list.size(); i++) {
                                  	

 	

 	

        Object o = list.get(i);
                                  	

 	

 	

        o.method();
                                  	

 	

     }


                                                              list.each(){
                                  	

 	

 	

                       it.method()
                                  	

 	

                     }




quarta-feira, 9 de maio de 2012
Mais facilidades...
                                       Looping


                                              for (i in 0..<10) {
                                  	

 	

 	

        print i
                                  	

 	

     }




quarta-feira, 9 de maio de 2012
Mais facilidades...
                                        Return


                                         String getEdicao (num){
                                  	

        "Edicao: ${num} "
                                  	

    }




quarta-feira, 9 de maio de 2012
E ainda tem muito mais!



                                   http://groovy.codehaus.org/User+Guide	




quarta-feira, 9 de maio de 2012
http://www.springsource.com/
                                          developer/stso




                                  http://netbeans.org/downloads/
                                             index.html




                                     http://www.eclipse.org/
                                           downloads/
quarta-feira, 9 de maio de 2012
Mãos à obra




quarta-feira, 9 de maio de 2012
Primeiros Passos
                                        Instalação

                                  • Download: http://grails.org/
                                    Download

                                  • Descompactar a pasta
                                  • Configurar variável de
                                    ambiente GRAILS_HOME

                                  • Detalhes: http://grails.org/
                                    Installation+Portuguese




quarta-feira, 9 de maio de 2012
Comandos básicos

                            •     grails create-app
                            •     grails create-domain-class
                            •     grails generate-all
                            •     grails install-plugin
                            •     grails run-app
                            •     grails war

                                               grails help


quarta-feira, 9 de maio de 2012
Estrutura de diretórios e
                                    convenções de nome




quarta-feira, 9 de maio de 2012
Você percebeu?

                      • Nenhum arquivo XML de configuração
                      • Nenhum arquivo de mapeamento
                      • Nenhuma configuração de banco de dados
                      • Nenhuma instalação de servidor de
                              aplicação



                          Tem muita mágica por
                            baixo disso tudo!



quarta-feira, 9 de maio de 2012
Domain Class
                                  <<BD Simplificado>>
                                          Table Album
   class Album {
       String title                         id          title    artist    release_date
       String artist
       Date releaseDate

         static hasMany = [songs: Song]
   }
                                          Table Song


   class Song {                             id          title   duration    album_id
       String title
       Double duration
   }




quarta-feira, 9 de maio de 2012
Vamos criar uma
                                  simples aplicação!

quarta-feira, 9 de maio de 2012
CRUD

                                        Criar
                                      Recuperar
                                  Atualizar (Update)
                                  Remover (Delete)




quarta-feira, 9 de maio de 2012
Constraints
    class Usuario {

          String      username
          String      passwd
          String      nomeCompleto
          String      identidade

          static constraints = {

                 username(size:6..15, matches:"[a-zA-Z0-9]+", unique:true, blank:false, nullable:false)

                 passwd(size:6..100, matches:"[a-zA-Z0-9]+", blank:false, nullable:false, password:true)

                 nomeCompleto(size:1..50, blank:false, nullable:false)

                 identidade(size:1..20, blank:false, nullable:false, matches:"[0-9]+")

          }
    }

                       Ler documentação para ver todas as restrições!
quarta-feira, 9 de maio de 2012
Consultas ao BD
                                                                Table Album
                          class Album {
                               String title                     id     title    artist    release_date
                               String artist
                               Date releaseDate
                               static hasMany = [songs: Song]
                          }
                                                                 Table Song
                                         class Song {           id     title   duration    album_id
                                              String title
                                              Double duration
                                         }




                                                        Métodos default:

                                  •Album.count()
                                  •Album.get(1)
                                  •Song.list()
                                  •song.save()
                                  •song.delete()
                                  •...
quarta-feira, 9 de maio de 2012
Consultas ao BD
                                                                Table Album
                          class Album {
                               String title                     id     title    artist    release_date
                               String artist
                               Date releaseDate
                               static hasMany = [songs: Song]
                          }
                                                                 Table Song
                                    class Song {                id     title   duration    album_id
                                         String title
                                         Double duration
                                    }




                                                Buscas dinâmicas:

                                       •Song.findByTitle ("Parachutes")
                                       •Album.findByArtist ("Jotta A")
                                       •Song.findByDuration(3.24)


quarta-feira, 9 de maio de 2012
“Grails não é somente um
                                                       framework, mas uma
                                                  plataforma” (Graeme Rocher)




                                  Plugins permitem compor aplicações de
                                  forma rápida, sem muita configuração!




quarta-feira, 9 de maio de 2012
Mais de 750 plug-ins
                                                         (Sem contar as APIs de Java)




                      •       Testes: Functional-test, Fitness, Code coverage, etc.

                      •       Interfaces Robustas: Flex, GWT, RichUI, etc.

                      •       Segurança: Spring Security, Apache Shiro, OpenID, etc.

                      •       Integração: JasperReports, JMS, Google App Engine,
                              Facebook,Twitter, etc.



quarta-feira, 9 de maio de 2012
Material de Apoio

                 http://grails.org/doc/2.0.3/
                                          http://grails.org/Tutorials
                 http://grails.org/screencasts




quarta-feira, 9 de maio de 2012
Mundo perfeito!?
quarta-feira, 9 de maio de 2012
O que você precisa lembrar?


   Grails torna o desenvolvimento web simples,
     sem sacrificar a qualidade da aplicação!




quarta-feira, 9 de maio de 2012
Dúvidas ?




quarta-feira, 9 de maio de 2012
O “Santo Graal” do
                                  desenvolvimento Web!




                                              Natã Melo
                                   (nata.venancio.melo@gmail.com)
                                          Créditos: Diego Cavalcanti




quarta-feira, 9 de maio de 2012

Mais conteúdo relacionado

PDF
Java Web, o Tutorial
PDF
Animated transitions across UI views
PDF
Java Style Grading
PDF
MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...
PDF
[Android] Publish on Google Play & Google Analytics
PDF
Motores de busca em redes sociais
PDF
Sistemas Distribuídos - Publish-Subscribe - Kafka
PDF
Listas em Prolog
Java Web, o Tutorial
Animated transitions across UI views
Java Style Grading
MATRACA: Ferramenta open source para auxílio a deficientes visuais no uso do ...
[Android] Publish on Google Play & Google Analytics
Motores de busca em redes sociais
Sistemas Distribuídos - Publish-Subscribe - Kafka
Listas em Prolog

Semelhante a Minicurso grails (8)

PDF
Zend Framework 2 - O que esperar da nova versão
PDF
Boas Práticas de Design em Aplicações Ruby on Rails
PDF
Boas práticas de Design em Aplicações Rails
PDF
SOLID Principles
PDF
[dig2012] 11 - interfaces online
PPTX
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
PDF
TDC2018SP | Trilha Mobile - Learn once, code anywhere
PDF
Além do java
Zend Framework 2 - O que esperar da nova versão
Boas Práticas de Design em Aplicações Ruby on Rails
Boas práticas de Design em Aplicações Rails
SOLID Principles
[dig2012] 11 - interfaces online
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
TDC2018SP | Trilha Mobile - Learn once, code anywhere
Além do java
Anúncio

Mais de Natã Melo (20)

PDF
[Android] Google Service Play & Google Maps
PDF
Biografia de Bill Gates - Parte 4
PDF
Biografia de Bill Gates - Parte 3
PDF
Biografia de Bill Gates - Parte 2
PDF
Biografia de Bill Gates - Parte 1
PDF
Copas do Mundo de Futebol
PDF
Linguagem Python
PDF
Sistemas Recomendação em Redes Sociais
PDF
Sistema de Recomendação - Amigos DINS
PDF
Terremotos
PDF
Regresão Múltipla
PDF
Linguagem Go
PDF
Educação a Distância
PDF
Teste Dirigido por Modelos
PDF
Demonstração ApTest Manager
PDF
MetaCG
PDF
Redes Sociais - Utilizando-as de forma inteligente
PDF
MDA - Model Driven Architecture
PDF
Apresentação JavaCG MetaCG
PDF
Python aula 1
[Android] Google Service Play & Google Maps
Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 3
Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 1
Copas do Mundo de Futebol
Linguagem Python
Sistemas Recomendação em Redes Sociais
Sistema de Recomendação - Amigos DINS
Terremotos
Regresão Múltipla
Linguagem Go
Educação a Distância
Teste Dirigido por Modelos
Demonstração ApTest Manager
MetaCG
Redes Sociais - Utilizando-as de forma inteligente
MDA - Model Driven Architecture
Apresentação JavaCG MetaCG
Python aula 1
Anúncio

Último (19)

PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Aula 18 - Manipulacao De Arquivos python
Apple Pippin Uma breve introdução. - David Glotz
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Aula04-Academia Heri- Tecnologia Geral 2025
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
COBITxITIL-Entenda as diferença em uso governança TI
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Processos na gestão de transportes, TM100 Col18
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...

Minicurso grails

  • 1. O “Santo Graal” do desenvolvimento Web! Natã Melo (nata.venancio.melo@gmail.com) Créditos: Diego Cavalcanti quarta-feira, 9 de maio de 2012
  • 2. quarta-feira, 9 de maio de 2012
  • 4. • Perda de tempo para criar ambiente de desenvolvimento ... • ... e para configurar uma aplicação Olhando o passado quarta-feira, 9 de maio de 2012
  • 5. • Muitas tarefas repetitivas executadas manualmente • Muito tempo para aprender tecnologias (Spring, Hibernate, JSF, etc) Olhando o passado quarta-feira, 9 de maio de 2012
  • 6. • Baixa produtividade no desenvolvimento Web Olhando o passado quarta-feira, 9 de maio de 2012
  • 8. Temos solução para esses problemas? quarta-feira, 9 de maio de 2012
  • 9. Ruby on Rails CoC: Convention over Configuration DRY: Don’t Repeat Yourself quarta-feira, 9 de maio de 2012
  • 10. Ruby on Rails Stack Completo Expansibilidade quarta-feira, 9 de maio de 2012
  • 11. E por que não Ruby on Rails? O investimento feito na equipe e nas ferramentas com Java não deve se perder! quarta-feira, 9 de maio de 2012
  • 12. Desenvolvimento Web <<Rápido e com qualidade>> quarta-feira, 9 de maio de 2012
  • 13. Framework baseado em MVC para desenvolvimento web com alta produtividade quarta-feira, 9 de maio de 2012
  • 14. Padrão MVC quarta-feira, 9 de maio de 2012
  • 15. quarta-feira, 9 de maio de 2012
  • 16. •Spring •Hibernate •Groovy •Java •SiteMesh •Jetty •Apache Ant quarta-feira, 9 de maio de 2012
  • 17. Integração simples com o banco de dados Hibernate transparente para o programador + quarta-feira, 9 de maio de 2012
  • 19. Casos de sucesso Em 2007, eram 7 mil downloads por mês. Em 2008, passou para 70 mil! Mantém a média atualmente! quarta-feira, 9 de maio de 2012
  • 20. Casos de sucesso + 150 milhões de usuários quarta-feira, 9 de maio de 2012
  • 21. Casos de sucesso + 1 bilhão de páginas acessadas por mês quarta-feira, 9 de maio de 2012
  • 22. quarta-feira, 9 de maio de 2012
  • 23. Comunidade vibrante • http://grails.markmail.org/ • + de 200.000 mensagens • Em média 54 mensagens por dia quarta-feira, 9 de maio de 2012
  • 24. Pausa para alguns conceitos quarta-feira, 9 de maio de 2012
  • 25. Linguagem dinâmica e ágil para JVM Java com esteróides Todo o poder de Java mas com recursos poderosos emprestados de outras linguagens Integração com objetos e bibliotecas Java quarta-feira, 9 de maio de 2012
  • 26. public class Minicurso { private String titulo; public Minicurso (String titulo){ this.titulo = titulo; } public String getTitulo() { return titulo; } public void setTitulo(String titulo) { this.titulo = titulo; } public String getMensagem (){ return "Título do Minicurso: " + this.titulo; } } quarta-feira, 9 de maio de 2012
  • 27. public class Minicurso { private String titulo; public Minicurso (String titulo){ this.titulo = titulo; } public String getTitulo() { return titulo; } public void setTitulo(String titulo) { this.titulo = titulo; } public String getMensagem (){ return "Título do Minicurso: " + this.titulo; } } quarta-feira, 9 de maio de 2012
  • 28. E os esteróides? quarta-feira, 9 de maio de 2012
  • 29. “Groovyficando” o código class Minicurso { def titulo def getMensagem (){ "Título do Minicurso: ${titulo}" } } miniCurso = new Minicurso (titulo = "Grails") miniCurso.getMessagem () quarta-feira, 9 de maio de 2012
  • 30. Mais facilidades... Null Checking if (obj != null) ... if (obj) ... quarta-feira, 9 de maio de 2012
  • 31. Mais facilidades... Null Checking Object obj = new Object (); String str = "Valor do objeto: " + obj == null ? "null" : obj.toString(); Object obj = new Object() String str = "Valor do objeto ${obj?.toString()}" quarta-feira, 9 de maio de 2012
  • 32. Mais facilidades... Mapas import java.util.HashMap; import java.util.Map; Map m = new HashMap(); m.put("br", "Brasil"); m.put("us", "USA"); m = [br:"Brasil", us:"USA"] quarta-feira, 9 de maio de 2012
  • 33. Mais facilidades... Looping for (int i = 0; i < list.size(); i++) { Object o = list.get(i); o.method(); } list.each(){ it.method() } quarta-feira, 9 de maio de 2012
  • 34. Mais facilidades... Looping for (i in 0..<10) { print i } quarta-feira, 9 de maio de 2012
  • 35. Mais facilidades... Return String getEdicao (num){ "Edicao: ${num} " } quarta-feira, 9 de maio de 2012
  • 36. E ainda tem muito mais! http://groovy.codehaus.org/User+Guide quarta-feira, 9 de maio de 2012
  • 37. http://www.springsource.com/ developer/stso http://netbeans.org/downloads/ index.html http://www.eclipse.org/ downloads/ quarta-feira, 9 de maio de 2012
  • 38. Mãos à obra quarta-feira, 9 de maio de 2012
  • 39. Primeiros Passos Instalação • Download: http://grails.org/ Download • Descompactar a pasta • Configurar variável de ambiente GRAILS_HOME • Detalhes: http://grails.org/ Installation+Portuguese quarta-feira, 9 de maio de 2012
  • 40. Comandos básicos • grails create-app • grails create-domain-class • grails generate-all • grails install-plugin • grails run-app • grails war grails help quarta-feira, 9 de maio de 2012
  • 41. Estrutura de diretórios e convenções de nome quarta-feira, 9 de maio de 2012
  • 42. Você percebeu? • Nenhum arquivo XML de configuração • Nenhum arquivo de mapeamento • Nenhuma configuração de banco de dados • Nenhuma instalação de servidor de aplicação Tem muita mágica por baixo disso tudo! quarta-feira, 9 de maio de 2012
  • 43. Domain Class <<BD Simplificado>> Table Album class Album { String title id title artist release_date String artist Date releaseDate static hasMany = [songs: Song] } Table Song class Song { id title duration album_id String title Double duration } quarta-feira, 9 de maio de 2012
  • 44. Vamos criar uma simples aplicação! quarta-feira, 9 de maio de 2012
  • 45. CRUD Criar Recuperar Atualizar (Update) Remover (Delete) quarta-feira, 9 de maio de 2012
  • 46. Constraints class Usuario { String username String passwd String nomeCompleto String identidade static constraints = { username(size:6..15, matches:"[a-zA-Z0-9]+", unique:true, blank:false, nullable:false) passwd(size:6..100, matches:"[a-zA-Z0-9]+", blank:false, nullable:false, password:true) nomeCompleto(size:1..50, blank:false, nullable:false) identidade(size:1..20, blank:false, nullable:false, matches:"[0-9]+") } } Ler documentação para ver todas as restrições! quarta-feira, 9 de maio de 2012
  • 47. Consultas ao BD Table Album class Album { String title id title artist release_date String artist Date releaseDate static hasMany = [songs: Song] } Table Song class Song { id title duration album_id String title Double duration } Métodos default: •Album.count() •Album.get(1) •Song.list() •song.save() •song.delete() •... quarta-feira, 9 de maio de 2012
  • 48. Consultas ao BD Table Album class Album { String title id title artist release_date String artist Date releaseDate static hasMany = [songs: Song] } Table Song class Song { id title duration album_id String title Double duration } Buscas dinâmicas: •Song.findByTitle ("Parachutes") •Album.findByArtist ("Jotta A") •Song.findByDuration(3.24) quarta-feira, 9 de maio de 2012
  • 49. “Grails não é somente um framework, mas uma plataforma” (Graeme Rocher) Plugins permitem compor aplicações de forma rápida, sem muita configuração! quarta-feira, 9 de maio de 2012
  • 50. Mais de 750 plug-ins (Sem contar as APIs de Java) • Testes: Functional-test, Fitness, Code coverage, etc. • Interfaces Robustas: Flex, GWT, RichUI, etc. • Segurança: Spring Security, Apache Shiro, OpenID, etc. • Integração: JasperReports, JMS, Google App Engine, Facebook,Twitter, etc. quarta-feira, 9 de maio de 2012
  • 51. Material de Apoio http://grails.org/doc/2.0.3/ http://grails.org/Tutorials http://grails.org/screencasts quarta-feira, 9 de maio de 2012
  • 53. O que você precisa lembrar? Grails torna o desenvolvimento web simples, sem sacrificar a qualidade da aplicação! quarta-feira, 9 de maio de 2012
  • 54. Dúvidas ? quarta-feira, 9 de maio de 2012
  • 55. O “Santo Graal” do desenvolvimento Web! Natã Melo (nata.venancio.melo@gmail.com) Créditos: Diego Cavalcanti quarta-feira, 9 de maio de 2012