Produtividade na web_com_groovy_e_grails_pt2
-
Upload
lucas-aquiles -
Category
Documents
-
view
855 -
download
0
description
Transcript of Produtividade na web_com_groovy_e_grails_pt2
- 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 )