Your SlideShare is downloading. ×
0
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Groovy grails
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Groovy grails

1,832

Published on

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

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

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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

×