Transcript
  • 1. Produtividade na web com Groovy e Grails

2. Quem somos? Lucas Aquiles / @lucas_aquiles ADS / IFPI [email_address] lucasaquiles.com.br/blog Fco Marcos / @fcomarcosrocha ADS / IFPI Colaborador LAPESI [email protected] 3. O Grails

  • Inspirao
  • Conveno ao invs de configurao

4. Ruby on Rails, Django, TurboGears Construdo sobre gigantes

  • Java/ JEE

5. Spring Framework 6. Hiberante Reduz a complexidade 7. Produtividade 8. O Grails

  • GORM
  • Baseado no Hiberante

Camada de viso

  • GSP (Groovy Server Pages)

9. TagLib dinmicas e SiteMesh Camada de controle:

  • Baseado no Spring MVC / Spring Web Flow

Dependency Injection (DI)

  • Spring Container

Internacionalizao (i18n) 10. 11. Grails - Instalao e Configurao

  • http://www.grails.org/Downloads
  • Descompacte o arquivo e configure o GRAILS_HOME

12. Hello Grails

  • grails create-app helloword

13. grais create-controller HelloWord 14. grails- app/controllers/helloword/HelloWordController.groovy 15. def helloword = { render meu 123487 hello word! } 16. Comandos - Grails

  • Comandos bsicos
  • grailscreate-appAppDemo

17. grailscreate-domain-classbr.edu.ifpi.MinhaClass 18. grailscreate-controllerbr.edu.ifpi.MinhaClass 19. grailscreate-servicebr.edu.ifpi.MinhaClass 20. grailsgenerate-all// gera as views os controlleres 21. grailsschema-export// expora o esquema de tabelas 22. grailsconsole// abre o console do groovy 23. grailsclean// limpa ateraes 24. grailsrun-app// roda a aplicao 25. Grails - Estrutura Arquivos de configurao: DataSource.groovy Config.groovy Bootstrap.groovy internacionalizao web.xml Libs adicionais: ex mysql-connector.jar 26. DataSource - Grails

  • DataSource - Arquivo de configurao de banco de dados

27. Configurado por padro com o HSQLDB

  • Um banco de dados leve, usado para testes

Possui trs ambientes de trabalho

  • Test, Production e Development

28. DataSource - Grails 29. MVC - Grails

  • M odelo Tudo que ser usado como Entidade fic aqui.
  • grails-app/domain/

30. grails create-domain-class 31. Separar a lgica de negcio do modelo 32. Cada classe de domnio corresponde uma tabela do banco de dados relacional 33. MVC - Grails

  • C ontroller: Toda regra de negcio fica no controller.
  • grails-app/controller

34. grails create-controller 35. action:So clousures que iro receber as requisies e fazer alguma coisa

  • def actionQueFazAlgumaCoisa = {render o/ }

36. MVC - Grails

  • Controller
  • params: um map (hash) de parmetros de uma requisio
  • defactionQuePegaOParamsEExibe = {
  • render parametros: ${params}

} flash:map temporrio que armazena objetos da seo, o hash limpo a cada nova requisio

  • def actionQueMostraOFlashMessage = {
  • flash.message = ${params}

} 37. MVC - Grails

  • Controller
  • render:renderiza uma resposta

38. redirect:redireciona uma ao usando HTTP redirect

  • defactionQueRedireciontaPraOutraAction = {
  • redirect(controller:meuController, action:outraAction)

} 39. MVC Grails

  • Controller
  • scaffolding
  • cria a estrura de CRUD para aquele modelo

40. def scaffolding = MinhaClasseDeDominio 41. MVC - Grails

  • Views
  • crails create-view
  • grails-app/views//

42. ou Utilizam a GSP taglib

  • Evita misturar cdigo de programao com linguagem de marcao

43. Semelhando ao JSP

  • def show = { [book:Book.get(params.id)]}

44. 45. MVC - Grails

  • Views
  • Loops
  • Ttulo: ${it.titulo}

46.

  • Ttulo: ${livro.titulo}

47. MVC - Grails

  • Views
  • Condies
  • Hello, ${tr00}

48.

  • --- faz alguma coisa

49.

  • faz outra coisa

50. Service - Grails

  • Services
  • grails create-service

51. grails-app/services/ 52. Centraliza a regra de negcio 53. Compartilha a mesma regra com classes de domnio que possuam essa lgica 54. Injetado automaticamente no controller pelo Spring 55. Service - Grails

  • Services
  • Transactions

56. transactional = true

  • Essencial para manter a integridade do banco de dados via ACID;
  • Atomicidade A terefa foi completa ou no

57. Consistncia-o banco de dados deve permanecer consistente antes e depois de uma operao 58. Isolao uma transao est isolada das outras operaes 59. Durabilidade desde que a transao esteja feita, isso garante que a transao no possa ser desfeita 60. Scaffolding - Grails

  • Scaffolding
  • Permite criar rapidamente interfaces de CRUD para classes de domnio que estejam definidas

61. timo para prototipao 62. Scaffolding - Grails

  • Scaffolding dinmico:
  • def scaffolding = MyDomainClass

Scaffolding esttico

  • grails genreate-views:gera as views para uma classe de domnio especfica

63. grails generate-controller : cria o controlador para uma classe de domnio especfica 64. grails generate-all : cria os controlers + views 65. ex: grails generate-all br.edu.ifpi.beans.Aluno 66. MVC - Grails

  • GORM
  • Hibernate por baixo dos panos

67. Permite fazer o mapeamento objeto / relacional do modelo orientado a objetos com o banco de dados relacional 68. Cada classe de domnio representa uma tabela do banco de dados 69. Uma instncia representa uma linha da tabela 70. Cada atributo da classe representa uma coluna da tabela 71. MVC - Grails

  • Enquanto isso no hibernate ...
  • Criar uma classe, anotar a classe com a implementao do JPA, mapea a classe no arquivo de configurao,cria uma fabrica de sesses, cria um Dao, e por fim instancia um objeto da classe e persiste.

72. TUDO ISSO? 73. GORM - Grails

  • Com o GORM do grails
  • grails create-domain-class Usuario

74. grails console 75. def usuario = new User(login:tr00,password:tr00) 76. usuario.save() 77. No precisa extender de ningum, no precisa de annotations. 78. grande semelhana com o ActiveRecord 79. GORM - Grails

  • Mtodos do GORM
  • save()

80. list() 81. delete() 82. get(Object o) Buscadores dinmicos 83. GORM - Grails

  • Buscadores dinmicos
  • FindBy*
  • Usuario.findByUsernameAndPassword(mock,mocklogin)

FindAllBy*

  • Usuario.findAllByGroup(Group.get(1))

FindWhere, findAllWhere

  • Usuario.findWhere([ "username": "mock", login: "mocklogin"])

HQL Hibernate Query Language

  • User.find(from User where login = :login and senha = :senha, [mock,mocklogin])

84. Parmetros:

  • max,sort , order

85. ORM - Grails

  • Comparadores
  • Between
  • User.findByDateCreatedBetween(today-10, today)

Like

  • User.findByBioLike('%tr00%')

NotEqual

  • Album.findByTitleNotEqual('titulo de teste')

IsNull

  • User.findByGroupIsNull()

IsNotNull

  • User.findByGroupIsNotNull()

86. GORM - Grails

  • Usando Criteria do Hibernate

87. Uma das mais poderosos de de busca

  • get :retorna uma instancia da query

88. list : retorna uma lista de instancias 89. count : retorna um total de resultados como um inteiro da query 90. def c = DomainClass.createCriteria() 91. def result = c.list{ eq('nome','tr00' } 92. GORM - Grails

  • Relacionamentos
  • Permite 4 tipos de relacionamentos
  • One-to-one, One-to-Many, Many-to-One e Many-to-Many

OneToMany

  • PlayerhasOneclub

HasMany 93. - clubhasManyplayers

  • Mtodos dinmicos

94. Club.addToPlayers(new Player()) 95. Club.removeFromPlayers(Player.get(1L)) BelongsTo

  • PlayerbelongsToclube

96. i18n - Grails

  • Internacionalizao i18N
  • grails-app/i18n/

97. Permite exibir mensagens no idioma de preferncia do usurio 98. Os arquivos .properties 99. Testes - Grails

  • Testes
  • Sempre que uma um controller, service ou classe domnio criada, criada uma classe de teste de integrao correspondente

100. Usa o Junit e o Canoo por baixo dos panos 101. Permite fazer:

  • Testes unitrios

102. Testes de integrao 103. Testes funcionais A aplicao vai trabalhar como esperado 104. A classe de testes extendem de GroovyTestCase 105. Permite o uso de assert*, setUp e tearDown 106. Tests - Grails

  • Testes
  • Teste de Integrao!=teste Unitrio

107. Testes unitrios no grails so criados com o comando:

  • grails create-unit-test

108. tests/unit/ nos testes unitrios os mtodos dinmicos como save, findBy* no esto disponveis 109. O grails faz isso pra ajudar voc a diferenciar testes unitrios e de integrao 110. testes unitrios se preucupam em testar apenas uma parte do cdigo e no o problema como um todo 111. Testes - Grails

  • mas comotestar sem os mtodos dinmicos?

112. Testes - Grails

  • Testes
  • A entram em cena oMockFor*e oStubFor*

113. http://groovy.codehaus.org/Groovy+Mocks 114. Aplicao de exemplo - Grails

  • Querist
  • Aplicao de perguntas e respostas onde um usurio envia perguntas e outros usurios enviam as respostas.

115. Uma resposta pode receber votos, a resposta mais votada tda como a mais confivel Regras:

  • Um usurio tem muitas perguntas e mutias respostas

116. Uma pergunta tem um usurio ( quem perguntou ) e vrias respostas 117. Uma resposta pertence a uma pergunta e possui vrios usurios ( quem respondu )


Top Related