Your SlideShare is downloading. ×
0
Groovy e Grails Lucas Aquiles @lucas_aquiles
O Grails <ul><li>Inspiração </li><ul><li>Convenção ao invés de configuração
RubyonRails, Django, TurboGears </li></ul><li>Construído sobre gigantes </li><ul><li>Java / JEE
Spring Framework
Hiberante </li></ul><li>Reduz a complexidade
Aumento da produtividade </li></ul>
O Grails <ul><li>GORM </li><ul><li>Baseado no Hiberante </li></ul><li>Camada de visão </li><ul><li>GSP (Groovy Server Pages)
TagLib dinâmicas e SiteMesh </li></ul><li>Camada de controle: </li><ul><li>Baseado no Spring MVC / Spring Web Flow </li></...
 
Grails - Instalação e Configuração <ul><li>http://www.grails.org/Downloads </li><ul><li>Descompacte o arquivo e configure ...
“Hello Grails” </li><ul><li>grails create-app helloword
grais create-controller HelloWord
grails- app/controllers/helloword/HelloWordController.groovy
def helloword = { render “meu 123487 hello word!” } </li></ul></ul></ul>
Comandos - Grails <ul><li>Comandos básicos </li><ul><li>grails  create-app  AppDemo
grails  create-domain-class  br.edu.ifpi.MinhaClass
grails  create-controller  br.edu.ifpi.MinhaClass
grails  create-service  br.edu.ifpi.MinhaClass
grails  generate-all  // gera as views os controlleres
grails  schema-export  // expora o esquema de tabelas
grails  console  // abre o console do groovy
grails  clean  // limpa aterações
grails  run-app  // roda a aplicação </li></ul></ul>
Grails - Estrutura Arquivos de configuração: DataSource.groovy Config.groovy Bootstrap.groovy internacionalização web.xml ...
DataSource - Grails <ul><li>DataSource - Arquivo de configuração de banco de dados
Configurado por padrão com o HSQLDB </li><ul><li>Um banco de dados leve, usado para testes </li></ul><li>Possui três ambie...
DataSource - Grails
M VC - Grails <ul><li>M odelo – Tudo que será usado como Entidade ficá aqui. </li><ul><li>/grails-app/domain/
grails create-domain-class
Separar a lógica de negócio do modelo
Cada classe de domínio corresponde à uma tabela do banco de dados relacional </li></ul></ul>
M VC - Grails <ul><li>Constrains </li><ul><li>Usadas para determinar o tipo de entrada dos campos </li><ul><li>static cons...
password  blank:false, size:1..6
email  email:true, nullable:false </li></ul></ul><li>} </li></ul></ul></ul>
M VC - Grails <ul><li>GORM  </li><ul><li>Hibernate por baixo dos panos
Permite fazer o mapeamento objeto / relacional do modelo orientado a objetos com o banco de dados relacional
Cada classe de domínio representa uma tabela do banco de dados
Uma instância representa uma linha da tabela
Upcoming SlideShare
Loading in...5
×

Groovy grails

1,860

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,860
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
68
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Groovy grails"

  1. 1. Groovy e Grails Lucas Aquiles @lucas_aquiles
  2. 2. O Grails <ul><li>Inspiração </li><ul><li>Convenção ao invés de configuração
  3. 3. RubyonRails, Django, TurboGears </li></ul><li>Construído sobre gigantes </li><ul><li>Java / JEE
  4. 4. Spring Framework
  5. 5. Hiberante </li></ul><li>Reduz a complexidade
  6. 6. Aumento da produtividade </li></ul>
  7. 7. O Grails <ul><li>GORM </li><ul><li>Baseado no Hiberante </li></ul><li>Camada de visão </li><ul><li>GSP (Groovy Server Pages)
  8. 8. TagLib dinâmicas e SiteMesh </li></ul><li>Camada de controle: </li><ul><li>Baseado no Spring MVC / Spring Web Flow </li></ul><li>Dependency Injection (DI) </li><ul><li>Spring Container </li></ul><li>Internacionalização (i18n) </li></ul>
  9. 10. Grails - Instalação e Configuração <ul><li>http://www.grails.org/Downloads </li><ul><li>Descompacte o arquivo e configure o GRAILS_HOME
  10. 11. “Hello Grails” </li><ul><li>grails create-app helloword
  11. 12. grais create-controller HelloWord
  12. 13. grails- app/controllers/helloword/HelloWordController.groovy
  13. 14. def helloword = { render “meu 123487 hello word!” } </li></ul></ul></ul>
  14. 15. Comandos - Grails <ul><li>Comandos básicos </li><ul><li>grails create-app AppDemo
  15. 16. grails create-domain-class br.edu.ifpi.MinhaClass
  16. 17. grails create-controller br.edu.ifpi.MinhaClass
  17. 18. grails create-service br.edu.ifpi.MinhaClass
  18. 19. grails generate-all // gera as views os controlleres
  19. 20. grails schema-export // expora o esquema de tabelas
  20. 21. grails console // abre o console do groovy
  21. 22. grails clean // limpa aterações
  22. 23. grails run-app // roda a aplicação </li></ul></ul>
  23. 24. Grails - Estrutura Arquivos de configuração: DataSource.groovy Config.groovy Bootstrap.groovy internacionalização web.xml Libs adicionais: ex mysql-connector.jar
  24. 25. DataSource - Grails <ul><li>DataSource - Arquivo de configuração de banco de dados
  25. 26. Configurado por padrão com o HSQLDB </li><ul><li>Um banco de dados leve, usado para testes </li></ul><li>Possui três ambientes de trabalho </li><ul><li>Test, Production e Development </li></ul></ul>
  26. 27. DataSource - Grails
  27. 28. M VC - Grails <ul><li>M odelo – Tudo que será usado como Entidade ficá aqui. </li><ul><li>/grails-app/domain/
  28. 29. grails create-domain-class
  29. 30. Separar a lógica de negócio do modelo
  30. 31. Cada classe de domínio corresponde à uma tabela do banco de dados relacional </li></ul></ul>
  31. 32. M VC - Grails <ul><li>Constrains </li><ul><li>Usadas para determinar o tipo de entrada dos campos </li><ul><li>static constraints = { </li><ul><ul><li>login blank:false, size:1..20, matches:'[a-z0-9]'
  32. 33. password blank:false, size:1..6
  33. 34. email email:true, nullable:false </li></ul></ul><li>} </li></ul></ul></ul>
  34. 35. M VC - Grails <ul><li>GORM </li><ul><li>Hibernate por baixo dos panos
  35. 36. Permite fazer o mapeamento objeto / relacional do modelo orientado a objetos com o banco de dados relacional
  36. 37. Cada classe de domínio representa uma tabela do banco de dados
  37. 38. Uma instância representa uma linha da tabela
  38. 39. Cada atributo da classe representa uma coluna da tabela </li></ul></ul>
  39. 40. M VC - Grails <ul><li>Enquanto isso da maneira tradicional ... </li><ul><li>Criar uma classe, anotar a classe com a implementação do JPA, mapea a classe no arquivo de configuração, cria uma fabrica de sessões, cria um Dao, e por fim instancia um objeto da classe e persiste. </li></ul></ul>
  40. 41. TUDO ISSO?
  41. 42. GORM - Grails <ul><li>Com o GORM do grails </li><ul><li>grails create-domain-class Usuario
  42. 43. grails console
  43. 44. def usuario = new User(login:”tr00”,password:”tr00”)
  44. 45. usuario.save()
  45. 46. Não precisa extender de ninguém, não precisa de annotations.
  46. 47. grande semelhança com o ActiveRecord </li></ul></ul>
  47. 48. GORM - Grails <ul><li>Métodos do GORM </li><ul><li>save()
  48. 49. list()
  49. 50. delete()
  50. 51. get(Object o) </li></ul><li>Buscadores dinâmicos </li></ul>
  51. 52. GORM - Grails <ul><li>Buscadores dinâmicos </li><ul><li>FindBy* </li><ul><li>Usuario.findByUsernameAndPassword(“mock”,”mocklogin”) </li></ul><li>FindAllBy* </li><ul><li>Usuario.findAllByGroup(Group.get(1)) </li></ul><li>FindWhere, findAllWhere </li><ul><li>Usuario.findWhere([ &quot;username&quot;: &quot;mock&quot;, login: &quot;mocklogin&quot;]) </li></ul></ul><li>HQL – Hibernate Query Language </li><ul><li>User.find(“from User where login = :login and senha = :senha”, [“mock”,”mocklogin”])
  52. 53. Parâmetros: </li><ul><li>max, sort , order </li></ul></ul></ul>
  53. 54. GORM - Grails <ul><li>Comparadores </li><ul><li>Between </li><ul><li>User.findByDateCreatedBetween(today-10, today) </li></ul><li>Like </li><ul><li>User.findByBioLike('%tr00%') </li></ul><li>NotEqual </li><ul><li>Album.findByTitleNotEqual('titulo de teste') </li></ul><li>IsNull </li><ul><li>User.findByGroupIsNull() </li></ul><li>IsNotNull </li><ul><li>User.findByGroupIsNotNull() </li></ul></ul></ul>
  54. 55. GORM - Grails <ul><li>Usando Criteria do Hibernate
  55. 56. Uma das mais poderosos de de busca </li><ul><li>get : retorna uma instancia da query
  56. 57. list : retorna uma lista de instancias
  57. 58. count : retorna um total de resultados como um inteiro da query
  58. 59. def c = DomainClass.createCriteria()
  59. 60. def result = c.list{ eq('nome','tr00' } </li></ul></ul>
  60. 61. GORM - Grails <ul><li>Relacionamentos </li><ul><li>Permite 4 tipos de relacionamentos </li><ul><li>One-to-one, One-to-Many, Many-to-One e Many-to-Many </li></ul><li>OneToMany </li><ul><li>Player hasOne Team </li></ul><li>HasMany
  61. 62. - Team hasMany players </li><ul><li>Métodos dinâmicos
  62. 63. teamInstance.addToPlayers(new Player(name:”derpson”))
  63. 64. teamInstance.removeFromPlayers(Player.get(1L)) </li></ul><li>BelongsTo </li><ul><li>Player belongsTo Team </li></ul></ul></ul>
  64. 65. MV C - Grails <ul><li>C ontroller: Toda regra de negócio fica no controller. </li><ul><li>grails-app/controller
  65. 66. grails create-controller
  66. 67. action: São clousures que irão receber as requisições e fazer alguma coisa </li><ul><li>def actionQueFazAlgumaCoisa = { render “me gusta!” } </li></ul></ul></ul>
  67. 68. MV C - Grails <ul><li>Controller </li><ul><li>params: é um map (hash) de parâmetros de uma requisição </li><ul><li>def actionQuePegaOParamsEExibe = { </li><ul><li>render “parametros: ${params}” </li></ul><li>} </li></ul><li>flash: map temporário que armazena objetos da seção, o hash é limpo a cada nova requisição </li><ul><li>def actionQueMostraOFlashMessage = { </li><ul><li>flash.message = “${params}” </li></ul><li>} </li></ul></ul></ul>
  68. 69. MV C - Grails <ul><li>Controller </li><ul><li>render: renderiza uma resposta
  69. 70. redirect: redireciona uma ação usando HTTP redirect </li><ul><li>def actionQueRedireciontaPraOutraAction = { </li><ul><li>redirect(controller:meuController, action:”outraAction”) </li></ul><li>} </li></ul></ul></ul>
  70. 71. MV C - Grails <ul><li>Controller </li><ul><li>scaffolding </li><ul><li>cria a estrura de CRUD para aquele modelo
  71. 72. def scaffolding = MinhaClasseDeDominio </li></ul></ul></ul>
  72. 73. M V C - Grails <ul><li>Views </li><ul><li>crails create-view </li><ul><li>grails-app/views/<domain>/
  73. 74. <% %> ou <%= %> </li></ul><li>Utilizam a GSP taglib </li><ul><li>Evita misturar código de programação com linguagem de marcação
  74. 75. Semelhando ao JSP </li><ul><li>def show = { [book:Book.get(params.id)]}
  75. 76. <%= book.title %> </li></ul></ul></ul></ul>
  76. 77. M V C - Grails <ul><li>Views </li><ul><li>Loops </li><ul><li><g:each in=”${livros}”> </li><ul><li><p>Título: ${it.titulo}</p> </li></ul><li></g:each>
  77. 78. <g:each in=”${livros}” var=”livro”> </li><ul><li><p>Título: ${livro.titulo}</p> </li></ul><li></g:each> </li></ul></ul></ul>
  78. 79. M V C - Grails <ul><li>Views </li><ul><li>Condições </li><ul><li><g:if test=”${nome == 'tr00'}”> </li><ul><li>Hello, ${tr00} </li></ul><li></g:if>
  79. 80. <g:else> </li><ul><li>--- faz alguma coisa </li></ul><li></g:else>
  80. 81. <g:elseif test=”2 % 2 == 0”> </li><ul><li>– faz outra coisa </li></ul><li></g:elseif> </li></ul></ul></ul>
  81. 82. Service - Grails <ul><li>Services </li><ul><li>grails create-service
  82. 83. grails-app/services/
  83. 84. Centraliza a regra de negócio
  84. 85. Compartilha a mesma regra com classes de domínio que possuam essa lógica
  85. 86. Injetado automaticamente no controller pelo Spring </li></ul></ul>
  86. 87. Service - Grails <ul><li>Services </li><ul><li>Transactions
  87. 88. transactional = true </li><ul><li>Essencial para manter a integridade do banco de dados via ACID; </li><ul><li>Atomicidade – A terefa foi completa ou não
  88. 89. Consistência - o banco de dados deve permanecer consistente antes e depois de uma operação
  89. 90. Isolação – uma transação está isolada das outras operações
  90. 91. Durabilidade – desde que a transação esteja feita, isso garante que a transação não possa ser desfeita </li></ul></ul></ul></ul>
  91. 92. Scaffolding - Grails <ul><li>Scaffolding </li><ul><li>Permite criar rapidamente interfaces de CRUD para classes de domínio que estejam definidas
  92. 93. Ótimo para prototipação </li></ul></ul>
  93. 94. Scaffolding - Grails <ul><li>Scaffolding dinâmico: </li><ul><li>def scaffolding = MyDomainClass </li></ul><li>Scaffolding estático </li><ul><li>grails genreate-views: gera as views para uma classe de domínio específica
  94. 95. grails generate-controller : cria o controlador para uma classe de domínio específica
  95. 96. grails generate-all : cria os controlers + views
  96. 97. ex: grails generate-all br.edu.ifpi.beans.Aluno </li></ul></ul>
  97. 98. i18n - Grails <ul><li>Internacionalização i18N </li><ul><li>grails-app/i18n/
  98. 99. Permite exibir mensagens no idioma de preferência do usuário
  99. 100. Os arquivos .properties </li></ul></ul>
  100. 101. Testes - Grails <ul><li>Testes </li><ul><li>Sempre que uma um controller, service ou classe domínio é criada, é criada uma classe de teste de integração correspondente
  101. 102. Usa o Junit e o Canoo por baixo dos panos
  102. 103. Permite fazer: </li><ul><li>Testes unitários
  103. 104. Testes de integração
  104. 105. Testes funcionais </li></ul><li>A aplicação vai trabalhar como esperado
  105. 106. A classe de testes extendem de GroovyTestCase
  106. 107. Permite o uso de assert*, setUp e tearDown </li></ul></ul>
  107. 108. Tests - Grails <ul><li>Testes </li><ul><li>Teste de Integração != teste Unitário
  108. 109. Testes unitários no grails são criados com o comando: </li><ul><li>grails create-unit-test
  109. 110. tests/unit/ </li></ul><li>nos testes unitários os métodos dinâmicos como save, findBy* não estão disponíveis
  110. 111. O grails faz isso pra ajudar você a diferenciar testes unitários e de integração
  111. 112. testes unitários se preucupam em testar apenas uma parte do código e não o problema como um todo </li></ul></ul>
  112. 113. Testes - Grails <ul>mas como testar sem os métodos dinâmicos? </ul>
  113. 114. Testes - Grails <ul><li>Testes </li><ul><li>Aí entram em cena o MockFor* e o StubFor*
  114. 115. http://groovy.codehaus.org/Groovy+Mocks </li></ul></ul>
  115. 116. Um exemplo de App Grails Serviço de url customizada e estatísticas de acesso http://4gplus.me
  116. 117. Aplicação de exemplo - Grails <ul><li>Querist </li><ul><li>Aplicação de perguntas e respostas onde um usuário envia perguntas e outros usuários enviam as respostas.
  117. 118. Uma resposta pode receber votos, a resposta mais votada é tída como a mais confiável </li></ul><li>Regras: </li><ul><li>Um usuário tem muitas perguntas e mutias respostas
  118. 119. Uma pergunta tem um usuário ( quem perguntou ) e várias respostas
  119. 120. Uma resposta pertence a uma pergunta e possui vários usuários ( quem respondu ) </li></ul></ul>
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×