Produtividade na web_com_groovy_e_grails_pt2

Download Produtividade na web_com_groovy_e_grails_pt2

Post on 28-May-2015

849 views

Category:

Documents

0 download

Embed Size (px)

DESCRIPTION

Slides da apresentao s

TRANSCRIPT

<ul><li> 1. Produtividade na web com Groovy e Grails</li></ul> <p> 2. Quem somos? Lucas Aquiles / @lucas_aquiles ADS / IFPI [email_address] lucasaquiles.com.br/blog Fco Marcos / @fcomarcosrocha ADS / IFPI Colaborador LAPESI fmarcosrocha@gmail.com 3. O Grails </p> <ul><li>Inspirao </li></ul> <ul><li>Conveno ao invs de configurao</li></ul> <p> 4. Ruby on Rails, Django, TurboGears Construdo sobre gigantes </p> <ul><li>Java/ JEE</li></ul> <p> 5. Spring Framework 6. Hiberante Reduz a complexidade 7. Produtividade 8. O Grails </p> <ul><li>GORM </li></ul> <ul><li>Baseado no Hiberante </li></ul> <p>Camada de viso </p> <ul><li>GSP (Groovy Server Pages)</li></ul> <p> 9. TagLib dinmicas e SiteMesh Camada de controle: </p> <ul><li>Baseado no Spring MVC / Spring Web Flow </li></ul> <p>Dependency Injection (DI)</p> <ul><li>Spring Container </li></ul> <p>Internacionalizao (i18n) 10. 11. Grails - Instalao e Configurao </p> <ul><li>http://www.grails.org/Downloads </li></ul> <ul><li>Descompacte o arquivo e configure o GRAILS_HOME</li></ul> <p> 12. Hello Grails </p> <ul><li>grails create-app helloword</li></ul> <p> 13. grais create-controller HelloWord 14. grails- app/controllers/helloword/HelloWordController.groovy 15. def helloword = { render meu 123487 hello word! } 16. Comandos - Grails </p> <ul><li>Comandos bsicos </li></ul> <ul><li>grailscreate-appAppDemo</li></ul> <p> 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 </p> <ul><li>DataSource - Arquivo de configurao de banco de dados</li></ul> <p> 27. Configurado por padro com o HSQLDB </p> <ul><li>Um banco de dados leve, usado para testes </li></ul> <p>Possui trs ambientes de trabalho </p> <ul><li>Test, Production e Development </li></ul> <p> 28. DataSource - Grails 29. MVC - Grails </p> <ul><li>M odelo Tudo que ser usado como Entidade fic aqui. </li></ul> <ul><li>grails-app/domain/</li></ul> <p> 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 </p> <ul><li>C ontroller: Toda regra de negcio fica no controller. </li></ul> <ul><li>grails-app/controller</li></ul> <p> 34. grails create-controller 35. action:So clousures que iro receber as requisies e fazer alguma coisa </p> <ul><li>def actionQueFazAlgumaCoisa = {render o/ } </li></ul> <p> 36. MVC - Grails </p> <ul><li>Controller </li></ul> <ul><li>params: um map (hash) de parmetros de uma requisio </li></ul> <ul><li>defactionQuePegaOParamsEExibe = {</li></ul> <ul><li>render parametros: ${params}</li></ul> <p>} flash:map temporrio que armazena objetos da seo, o hash limpo a cada nova requisio</p> <ul><li>def actionQueMostraOFlashMessage = { </li></ul> <ul><li>flash.message = ${params} </li></ul> <p>} 37. MVC - Grails </p> <ul><li>Controller </li></ul> <ul><li>render:renderiza uma resposta</li></ul> <p> 38. redirect:redireciona uma ao usando HTTP redirect </p> <ul><li>defactionQueRedireciontaPraOutraAction = { </li></ul> <ul><li>redirect(controller:meuController, action:outraAction) </li></ul> <p>} 39. MVC Grails </p> <ul><li>Controller </li></ul> <ul><li>scaffolding </li></ul> <ul><li>cria a estrura de CRUD para aquele modelo</li></ul> <p> 40. def scaffolding = MinhaClasseDeDominio 41. MVC - Grails </p> <ul><li>Views </li></ul> <ul><li>crails create-view </li></ul> <ul><li>grails-app/views//</li></ul> <p> 42. ou Utilizam a GSP taglib</p> <ul><li>Evita misturar cdigo de programao com linguagem de marcao</li></ul> <p> 43. Semelhando ao JSP </p> <ul><li>def show = { [book:Book.get(params.id)]}</li></ul> <p> 44. 45. MVC - Grails </p> <ul><li>Views </li></ul> <ul><li>Loops </li></ul> <ul><li><p>Ttulo: ${it.titulo}</p> </li></ul> <p> 46. </p> <ul><li><p>Ttulo: ${livro.titulo}</p> </li></ul> <p> 47. MVC - Grails </p> <ul><li>Views </li></ul> <ul><li>Condies </li></ul> <ul><li>Hello, ${tr00} </li></ul> <p> 48. </p> <ul><li>--- faz alguma coisa </li></ul> <p> 49. </p> <ul><li> faz outra coisa </li></ul> <p> 50. Service - Grails </p> <ul><li>Services </li></ul> <ul><li>grails create-service</li></ul> <p> 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 </p> <ul><li>Services </li></ul> <ul><li>Transactions</li></ul> <p> 56. transactional = true</p> <ul><li>Essencial para manter a integridade do banco de dados via ACID; </li></ul> <ul><li>Atomicidade A terefa foi completa ou no</li></ul> <p> 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 </p> <ul><li>Scaffolding </li></ul> <ul><li>Permite criar rapidamente interfaces de CRUD para classes de domnio que estejam definidas</li></ul> <p> 61. timo para prototipao 62. Scaffolding - Grails </p> <ul><li>Scaffolding dinmico:</li></ul> <ul><li>def scaffolding = MyDomainClass </li></ul> <p>Scaffolding esttico </p> <ul><li>grails genreate-views:gera as views para uma classe de domnio especfica</li></ul> <p> 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 </p> <ul><li>GORM</li></ul> <ul><li>Hibernate por baixo dos panos</li></ul> <p> 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 </p> <ul><li>Enquanto isso no hibernate ... </li></ul> <ul><li>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. </li></ul> <p> 72. TUDO ISSO? 73. GORM - Grails </p> <ul><li>Com o GORM do grails </li></ul> <ul><li>grails create-domain-class Usuario</li></ul> <p> 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 </p> <ul><li>Mtodos do GORM </li></ul> <ul><li>save()</li></ul> <p> 80. list() 81. delete() 82. get(Object o) Buscadores dinmicos 83. GORM - Grails </p> <ul><li>Buscadores dinmicos </li></ul> <ul><li>FindBy* </li></ul> <ul><li>Usuario.findByUsernameAndPassword(mock,mocklogin) </li></ul> <p>FindAllBy* </p> <ul><li>Usuario.findAllByGroup(Group.get(1)) </li></ul> <p>FindWhere, findAllWhere </p> <ul><li>Usuario.findWhere([ "username": "mock", login: "mocklogin"]) </li></ul> <p>HQL Hibernate Query Language </p> <ul><li>User.find(from User where login = :login and senha = :senha, [mock,mocklogin])</li></ul> <p> 84. Parmetros:</p> <ul><li>max,sort , order </li></ul> <p> 85. ORM - Grails </p> <ul><li>Comparadores </li></ul> <ul><li>Between </li></ul> <ul><li>User.findByDateCreatedBetween(today-10, today) </li></ul> <p>Like </p> <ul><li>User.findByBioLike('%tr00%') </li></ul> <p>NotEqual </p> <ul><li>Album.findByTitleNotEqual('titulo de teste') </li></ul> <p>IsNull </p> <ul><li>User.findByGroupIsNull() </li></ul> <p>IsNotNull </p> <ul><li>User.findByGroupIsNotNull() </li></ul> <p> 86. GORM - Grails </p> <ul><li>Usando Criteria do Hibernate</li></ul> <p> 87. Uma das mais poderosos de de busca </p> <ul><li>get :retorna uma instancia da query</li></ul> <p> 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 </p> <ul><li>Relacionamentos </li></ul> <ul><li>Permite 4 tipos de relacionamentos </li></ul> <ul><li>One-to-one, One-to-Many, Many-to-One e Many-to-Many </li></ul> <p>OneToMany </p> <ul><li>PlayerhasOneclub </li></ul> <p>HasMany 93. - clubhasManyplayers </p> <ul><li>Mtodos dinmicos</li></ul> <p> 94. Club.addToPlayers(new Player()) 95. Club.removeFromPlayers(Player.get(1L)) BelongsTo </p> <ul><li>PlayerbelongsToclube</li></ul> <p> 96. i18n - Grails </p> <ul><li>Internacionalizao i18N </li></ul> <ul><li>grails-app/i18n/</li></ul> <p> 97. Permite exibir mensagens no idioma de preferncia do usurio 98. Os arquivos .properties 99. Testes - Grails </p> <ul><li>Testes </li></ul> <ul><li>Sempre que uma um controller, service ou classe domnio criada, criada uma classe de teste de integrao correspondente</li></ul> <p> 100. Usa o Junit e o Canoo por baixo dos panos 101. Permite fazer: </p> <ul><li>Testes unitrios</li></ul> <p> 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 </p> <ul><li>Testes </li></ul> <ul><li>Teste de Integrao!=teste Unitrio</li></ul> <p> 107. Testes unitrios no grails so criados com o comando: </p> <ul><li>grails create-unit-test</li></ul> <p> 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 </p> <ul><li>mas comotestar sem os mtodos dinmicos? </li></ul> <p> 112. Testes - Grails</p> <ul><li>Testes </li></ul> <ul><li>A entram em cena oMockFor*e oStubFor*</li></ul> <p> 113. http://groovy.codehaus.org/Groovy+Mocks 114. Aplicao de exemplo - Grails </p> <ul><li>Querist </li></ul> <ul><li>Aplicao de perguntas e respostas onde um usurio envia perguntas e outros usurios enviam as respostas.</li></ul> <p> 115. Uma resposta pode receber votos, a resposta mais votada tda como a mais confivel Regras: </p> <ul><li>Um usurio tem muitas perguntas e mutias respostas</li></ul> <p> 116. Uma pergunta tem um usurio ( quem perguntou ) e vrias respostas 117. Uma resposta pertence a uma pergunta e possui vrios usurios ( quem respondu ) </p>