Groovy grails

  • 1,703 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,703
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
54
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 )