Grails

1,019 views
957 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,019
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
41
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Grails

  1. 1. Introdução ao GrailsConceitos básicos do Grails Framework e ZK @Lucas_Aquiles @lucas_aquiles
  2. 2. RoteiroO que é Grails?Primeiro ProjetoO M do MVCPersistência – GORMRelacionamentos @lucas_aquiles
  3. 3. O que é GrailsProblemas 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. 4. E quando algum problemaaparecia... @lucas_aquiles
  5. 5. O que é Grails = + @lucas_aquiles
  6. 6. O que é GrailsFramework baseada no MVCSegue boas praticas popularizadas pelo Rails CoC DRYConstruí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. 7. O que é GrailsInstalaçã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. 8. O que GrailsCadê os arquivos de config?Cadê meus DAOs? E os mapeamentos?Sem banco pra configurar?Sem servlet container ouApp server pra instalar? @lucas_aquiles
  9. 9. O que é Grails DataSource.groovy Config.groovy Bootstrap.groovy URLMapping.groovy web.xml @lucas_aquiles
  10. 10. O M do MVCToda entidade persistente fica aquiSão mapeadas de maneira transparenteModel são configurados como POGOsCada classe de domínio corresponde a uma tabela no banco de dados relacionalcomando: grails create-domain-class P erson @lucas_aquiles
  11. 11. O M do MVCÉ uma classe Groovy normalConstraints Valida a entrada dos campos Você pode criar sua própria constraints blank, creditcard, email, url, nullable, unique @lucas_aquiles
  12. 12. Persistência - GORMUtiliza o Hibernate por baixo dos panosPara 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. 13. Persistência - GORMBuscadores dinâmicosFindBy*, FindAllBy*FindWhere*, findAllWhere* @lucas_aquiles
  14. 14. Persistência - GORMHQL – 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. 15. Persistência - GORMComparadores Like Produto.findByNomeLike(“%test”) LessThan Produto.findByPrecoLessThan(2.0) IsNotNull Produto.findByCategoriaIsNotNull() NotEqual @lucas_aquiles
  16. 16. Persistência - GORMSuporte a criteria API def criteria = createCriteria(); def resultado = criteria.list(){ categoria{eq(2)} order “nome” } @lucas_aquiles
  17. 17. RelacionamentosPermite 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. 18. RelacionamentosEm relacionamentos manyT oM any um dos lados da relação deve definir o belongsT oMapping 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. 19. O C do MVCToda regra de negócio é chamada a partir daquiA c t i o n s : são clousures que vão receber requisições e fazer alguma coisaH ttpServletR equest e H ttpServletR esponsep a r a m s : váriavel,map, injetado dinamicamente em todo controller que contêm os parametros da requisição @lucas_aquiles
  20. 20. O C do MVCR e n d e r : renderiza uma resposta Uma view, um texto, um template Parâmetros view template model text var @lucas_aquiles
  21. 21. O C do MVCR e d i r e c t : redireciona para algum lugar Parâmetros: action controller URI params @lucas_aquiles
  22. 22. O C do MVCA 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. 23. ServiceCentraliza a regra de negócioCompartilha a mesma regra de negócio com a classe de domínioÉ injetado automaticamente no controller pelo SpringC omando: grails create-service ServiceN ame @lucas_aquiles
  24. 24. ServiceTransactionsEssencial para manter a integridade do banco de dados seguindo os conceitos de ACID: Atomicidade Consistência Isolação Durabilidade @lucas_aquiles
  25. 25. O V do MVCComando grails-generate-views D omainN ameArquivos .gspBaseados em taglibs Evitam misturar codigo de programação com código de marcação Semelhante ao JSP <%= produto.nome %> @lucas_aquiles
  26. 26. O V do MVCLoops 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. 27. ScaffoldingComando: 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. 28. TDD – Test Driven DevelopmentIntegrado com o jUnitToda classe de teste extende GroovyTestCasePermite fazer testes: Unitários De integração FuncionaisSemelhante aos testes em Java @lucas_aquiles
  29. 29. TDDUnitTest != 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. 30. TDDmockDomain Herdado de GrailsUnitTestCase Injeta na classe de domínio que a classe deve ter Validate(), save(), delete() @lucas_aquiles
  31. 31. TDDTestes 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. 32. Pluginsgrails install-plugin [plugin-name]grails install-plugin [local-do-plugin]grails create-plugin @lucas_aquiles
  33. 33. Duvidas? @lucas_aquiles

×