Grails

925 visualizações

Publicada em

Um pouco sobre Grails

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
925
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
15
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Grails

  1. 1. DESENVOLVIMENTO  WEB  COM    GRAILS  Ricardo  Wendell  rickwendell@gmail.com  
  2. 2. OBJETIVO   Apresentar  as  principais   caracterís4cas  e  componentes   do  Grails    
  3. 3. O  QUE  É  O  GRAILS?  Um  framework  web  para  a  JVM    Foco  em  produIvidade!    Linguagem  dinâmica  –  Groovy    Conven&on  over  Configura&on   Ferramentas  que  promovem  agilidade  
  4. 4. FERRAMENTAS  QUE  AJUDAM…  DSLs    Geradores  de  código  Resolução  de  dependências  Configurações  mul4-­‐ambientes  
  5. 5. POR  DEBAIXO…  Spring  Framework  Spring  MVC  Hibernate  SiteMesh  Servlet  API  
  6. 6. COMPONENTES  DO  GRAILS  Scripts  de  criação  Model-­‐View-­‐Controller  (MVC)  Grails  Object  Rela4onal  Mapping  (GORM)  Services  Resolução  de  dependências  e  configurações  Plugins    
  7. 7. SCRIPTS  DE  CRIAÇÃO  Geram  várias  partes  da  aplicação    create-­‐app:  cria  uma  aplicação    create-­‐domain-­‐class:  cria  uma  nova  classe  de   domínio    generate-­‐all:  gera  o  controller  e  views  associadas   para  uma  classe  de  domínio    run-­‐app:  executa  a  aplicação  no  Tomcat    
  8. 8. ESTRUTURA  DA  APLICAÇÃO   Pastas   PerspecIva  Grails  (STS)  
  9. 9. OBJETOS  DE  DOMÍNIO  (MODELO)  Objetos  são  automaIcamente  mapeados  para   tabelas  no  banco    Configurações  adicionais  com  DSL   Relacionamentos  entre  objetos   Validações  
  10. 10. EXEMPLO   class Livro{ String titulo String autor String descricao Date dataRevisao static hasMany = [comentarios: Comentario] static constraints = { titulo nullable: false, blank: false, size: 1..1024 autor nullable: false, blank: false, size: 2..255 descricao nullable:true, blank: true, maxSize: 1000000 dataRevisao nullable: true } }
  11. 11. GORM  Camada  padrão  de  persistência  Funcionalidades  para  leitura,  listagem,   ordenação,  contagem,  persistência  e  remoção  Definição  de  relacionamentos  entre  objetos  Métodos  de  busca  dinâmicos  Consultas  com  Criteria,  HQL  ou  SQL  Suporte  a  paginação  
  12. 12. VALIDAÇÕES  DAS  CLASSES  DE  DOMÍNIO  Os  métodos  save()  e  validate()  da  classe  de   domínio  disparam  as  validações    Cada  objeto  contém  uma  coleção  de  erros  de   validação    17  validações  prontas    Muitas  das  restrições  influenciam  a  geração  das   tabelas  para  as  classes  de  domínio  
  13. 13. VALIDAÇÕES  hip://grails.org/doc/latest/ref/Constraints/Usage.html  
  14. 14. RELACIONAMENTOS:  UM-­‐PARA-­‐UM  Declarado  com  um  atributo  do  4po  da  classe   referenciada    Bi-­‐direcional:  cada  classe  possui  um  atributo  do   outro  4po    En4dade  forte  e  cascading  são  declarados  com  a   propriedade  belongsTo  
  15. 15. RELACIONAMENTOS:  UM-­‐PARA-­‐UM  class  Face  {    Nariz  nariz  }    class  Nariz  {    sta4c  belongsTo  =  [face:  Face]  }  
  16. 16. RELACIONAMENTOS:  UM-­‐PARA-­‐MUITOS  Relacionamentos  um-­‐para-­‐muitos  usa  a   propriedade  hasMany      A  propriedade  belongsTo  também  pode  ser   usada  nesse  cenário  para  a  definição  de   relacionamento  bi-­‐direcional  
  17. 17. RELACIONAMENTOS:  UM-­‐PARA-­‐MUITOS  class  Autor  {          String  nome    sta4c  hasMany  =  [  livros  :  Livro  ]  }  class  Livro  {    String  4tulo  }  
  18. 18. RELACIONAMENTOS:  MUITOS-­‐PARA-­‐MUITOS  Declarado  ao  adicionar  a  propriedade  hasMany   a  cada  classe  do  relacionamento    Uma  das  classes  deve  declarar  a  propriedade   belongsTo  para  definir  a  en4dade  forte  
  19. 19. RELACIONAMENTOS:  MUITOS-­‐PARA-­‐MUITOS  class  Book  {        sta4c  belongsTo  =  Author        sta4c  hasMany  =  [authors:Author]        String  4tle  }    class  Author  {        sta4c  hasMany  =  [books:Book]        String  name  }  
  20. 20. MÉTODOS  DE  BUSCA  DINÂMICOS  Groovy  suporta  interceptação  de  chamadas  a  métodos    Grails  injeta  vários  métodos  em  todos  os  objetos  de   domínio  em  tempo  de  execução   get(id), getAll([id, id, id, …]), list(), listOrderBy*() findBy*(), findAllBy*(),  count(), countBy*() save(),  delete(), validate(), hasErrors withTransaction, withCriteria  
  21. 21. EXEMPLOS  Listagems   def  livros=  Livro.list()   livros  =  Livro.list(sort:”4tulo",  order:"asc")    Busca  por  Id   def  livros  =  Livro.get(23)   livros  =  Livro.getAll(23,  93,  81)  
  22. 22. COMPOSIÇÃO  DE  MÉTODOS  Os  métodos  countBy*()  e  findBy*()  podem  ser   criados  usando  nomes  de  atributos  da  classe  de   domínio  além  dos  seguintes  comparadores:    Equal,  NotEqual,  LessThan,  LessThanEquals,   GreaterThan,  GreaterThanEquals,  Like,  like  (case   insensi:ve),  InList,  Between,  IsNull,  IsNotNull    Funciona  para  até  dois  atributos  com   comparadores  opcionais  e  operadores  lógicos    
  23. 23. COMPOSIÇÃO  DE  MÉTODOS  def  livro  =  Livro.findByTitulo(“Harry  Poier”)  livro  =  Livro.findByTituloLike("Harry  Pot%")    livro  =  Livro.findByDataRevisaoBetween(  inicio,    fim)    livro  =  Livro.findByDataLancamentoGreaterThan(  algumaData  )    livro  =  Livro.findByTituloLikeOrDataRevisaoLessThan(  "%Java%",   algumaData  )  
  24. 24. BUSCAS  COM  CRITERIA  DSL  para  uso  de  Hibernate  Criteria:    def  c  =  Conta.createCriteria()  def  results  =  c  {    like(”cliente",  "Fred%")    and  {      between(”saldo",  500,  1000)      eq(”filial",  "London")    }    maxResults(10)    order(”nome",  "desc")  }  
  25. 25. BUSCAS  COM  HQL  Definidas  com  os  métodos  find,  findAll    def  results  =  Livro.findAll(    "from  Livro  as  l  where  l.4tulo  like  ’Harry%")  
  26. 26. CONTROLLERS  Gerencia  os  requests  da  aplicação  web  e  criam   ou  preparam  os  responses    Classes  com  o  nome  terminando  em  Controller    Script  de  geração:      grails  create-­‐controller  livro      
  27. 27. ESTRUTURA  BÁSICA  class  LivroController  {          def  list()  {                    //  definir  lógica  do  controller                  //  criar  modelo  de  dados  de  resposta                    return  model          }  }  
  28. 28. CONTROLLERS  GERADOS  COM  SCAFFOLDING  Métodos  gerados  automa4camente:   index  –  displays  list  of  all  domain  objects   list  –  displays  list  of  all  domain  objects   show  –  shows  details  of  the  domain  object   delete  –  deletes  the  domain  object   edit  –  opens  page  for  edi4ng  of  domain  object   update  –  updates  changes  made  to  domain  object   create  –  opens  page  for  domain  object  crea4on   save  –  saves  the  domain  object    
  29. 29. RETORNO  DOS  CONTROLLERS  1.  Retorna  um  mapa  de  dados  ou  nada.  Em  seguida   redireciona  o  fluxo  para  uma  view  com  o  mesmo   nome  da  ac4on  (método)    2.  Redireciona  para  outra  ação  ou  URL    3.  Renderiza  o  resultado  diretamente,  podendo  ser   uma  view,  template,  JSON,  XML  ou  binário    Possui  conversores  JSON  and  XML  na4vos  
  30. 30. URLMAPPINGS.GROOVY  DSL  para  customização  dos  mapeamentos  de  URIs   para  views  ou  ações  de  Controllers    Pode  ser  usada  para  a  definição  de  URIs  de   webservices  REST    Status  code  de  erros  também  podem  ser  mapeados      404,  500,  etc.  
  31. 31. VIEWS  Cada  controller  possuirá  uma  pasta  correspondente   dentro  de  grails-­‐app/views    Ex.:  grails-­‐app/views/paciente    As  views  são  definidas  em  GSPs    Convenção:  ‘redirecione  para  a  GSP  com  o  mesmo   nome  da  ação  do  controller  (customizável)’  
  32. 32. GROOVY  SERVER  PAGES  (GSPS)  Renderizam  as  views    Grails  provê  cerca  de  50  tags  para  uso  em  GSPs    Lógicas,  loops,  criação  de  links,  forms,  campos  de  form    Tags  para  gerenciamento  de  Javascript  e  outros  recursos    TagLibraries  podem  ser  criadas  facilmente  
  33. 33. LAYOUTS  COM  SITEMESH  
  34. 34. SERVICES  Suporte  automáIco  a  transações    sta4c  transac4onal  =  true  |  false    AutomaIcamente  gerenciados  pelo  Spring   Services  podem  ser  injetados  em  controllers,   outros  services  e  classes  de  domínio  
  35. 35. EXTENDENDO  O  GRAILS  COM  PLUGINS  A  maioria  das  principais  partes  do  Grails  são  na   verdade  implementadas  como  plugins      Busque  em  h^p://grails.org/plugins  
  36. 36. TESTES  Grails  cria  esqueletos  para  testes  unitários    Várias  subclasses  de  GroovyTestCase  para  testar   componentes  do  Grails    Suporte  a  mocks    mockDomain,  mockForConstraintsTest,   mockController,  mockTagLib,  mockLogging    Testes  de  integação  suportados  com  configuração  de   ambiente  de  testes  separada  para  o  banco  
  37. 37. PERGUNTAS?  

×