SlideShare une entreprise Scribd logo
1  sur  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
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

Contenu connexe

Similaire à Minicurso grails

Zend Framework 2 - O que esperar da nova versão
Zend Framework 2 - O que esperar da nova versãoZend Framework 2 - O que esperar da nova versão
Zend Framework 2 - O que esperar da nova versãoDomingos Teruel
 
Boas Práticas de Design em Aplicações Ruby on Rails
Boas Práticas de Design em Aplicações Ruby on RailsBoas Práticas de Design em Aplicações Ruby on Rails
Boas Práticas de Design em Aplicações Ruby on Railsrinaldifonsecanascimento
 
Boas práticas de Design em Aplicações Rails
Boas práticas de Design em Aplicações RailsBoas práticas de Design em Aplicações Rails
Boas práticas de Design em Aplicações Railsrinaldifonsecanascimento
 
SOLID Principles
SOLID PrinciplesSOLID Principles
SOLID PrinciplesIsmael
 
[dig2012] 11 - interfaces online
[dig2012] 11 - interfaces online[dig2012] 11 - interfaces online
[dig2012] 11 - interfaces onlineEduardo Novais
 
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...
JS Experience 2017 - Painel – Angular+React+Vue: Arquitetura, Performance e U...iMasters
 
TDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywhereTDC2018SP | Trilha Mobile - Learn once, code anywhere
TDC2018SP | Trilha Mobile - Learn once, code anywheretdc-globalcode
 

Similaire à Minicurso grails (8)

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

Plus de Natã Melo

[Android] Google Service Play & Google Maps
[Android] Google Service Play & Google Maps[Android] Google Service Play & Google Maps
[Android] Google Service Play & Google MapsNatã Melo
 
Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 4Biografia de Bill Gates - Parte 4
Biografia de Bill Gates - Parte 4Natã Melo
 
Biografia de Bill Gates - Parte 3
Biografia de Bill Gates - Parte 3Biografia de Bill Gates - Parte 3
Biografia de Bill Gates - Parte 3Natã Melo
 
Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 2Biografia de Bill Gates - Parte 2
Biografia de Bill Gates - Parte 2Natã Melo
 
Biografia de Bill Gates - Parte 1
Biografia de Bill Gates - Parte 1Biografia de Bill Gates - Parte 1
Biografia de Bill Gates - Parte 1Natã Melo
 
Copas do Mundo de Futebol
Copas do Mundo de FutebolCopas do Mundo de Futebol
Copas do Mundo de FutebolNatã Melo
 
Linguagem Python
Linguagem PythonLinguagem Python
Linguagem PythonNatã Melo
 
Sistemas Recomendação em Redes Sociais
Sistemas Recomendação em Redes SociaisSistemas Recomendação em Redes Sociais
Sistemas Recomendação em Redes SociaisNatã Melo
 
Sistema de Recomendação - Amigos DINS
Sistema de Recomendação - Amigos DINSSistema de Recomendação - Amigos DINS
Sistema de Recomendação - Amigos DINSNatã Melo
 
Regresão Múltipla
Regresão MúltiplaRegresão Múltipla
Regresão MúltiplaNatã Melo
 
Educação a Distância
Educação a DistânciaEducação a Distância
Educação a DistânciaNatã Melo
 
Teste Dirigido por Modelos
Teste Dirigido por ModelosTeste Dirigido por Modelos
Teste Dirigido por ModelosNatã Melo
 
Demonstração ApTest Manager
Demonstração   ApTest ManagerDemonstração   ApTest Manager
Demonstração ApTest ManagerNatã Melo
 
Redes Sociais - Utilizando-as de forma inteligente
Redes Sociais - Utilizando-as de forma inteligenteRedes Sociais - Utilizando-as de forma inteligente
Redes Sociais - Utilizando-as de forma inteligenteNatã Melo
 
MDA - Model Driven Architecture
MDA - Model Driven ArchitectureMDA - Model Driven Architecture
MDA - Model Driven ArchitectureNatã Melo
 
Apresentação JavaCG MetaCG
Apresentação JavaCG MetaCGApresentação JavaCG MetaCG
Apresentação JavaCG MetaCGNatã Melo
 

Plus de Natã Melo (20)

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

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