Your SlideShare is downloading. ×
Produtividade na web_com_groovy_e_grails_pt2
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

Produtividade na web_com_groovy_e_grails_pt2

841

Published on

Slides da apresentação s

Slides da apresentação s

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

  • Be the first to like this

No Downloads
Views
Total Views
841
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
33
Comments
0
Likes
0
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. 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 fmarcosrocha@gmail.com
  • 3. O Grails
    • Inspiração
      • Convenção ao invés de configuração
      • 4. Ruby on Rails, Django, TurboGears
    • Construído sobre gigantes
      • Java/ JEE
      • 5. Spring Framework
      • 6. Hiberante
    • Reduz a complexidade
    • 7. Produtividade
  • 8. O Grails
    • GORM
      • Baseado no Hiberante
    • Camada de visão
      • GSP (Groovy Server Pages)
      • 9. TagLib dinâmicas e SiteMesh
    • Camada de controle:
      • Baseado no Spring MVC / Spring Web Flow
    • Dependency Injection (DI)
      • Spring Container
    • Internacionalização (i18n)
  • 10.  
  • 11. Grails - Instalação e Configuração
    • 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 básicos
      • grails create-app AppDemo
      • 17. grails create-domain-class br.edu.ifpi.MinhaClass
      • 18. grails create-controller br.edu.ifpi.MinhaClass
      • 19. grails create-service br.edu.ifpi.MinhaClass
      • 20. grails generate-all // gera as views os controlleres
      • 21. grails schema-export // expora o esquema de tabelas
      • 22. grails console // abre o console do groovy
      • 23. grails clean // limpa aterações
      • 24. grails run-app // roda a aplicação
  • 25. Grails - Estrutura Arquivos de configuração: DataSource.groovy Config.groovy Bootstrap.groovy internacionalização web.xml Libs adicionais: ex mysql-connector.jar
  • 26. DataSource - Grails
    • DataSource - Arquivo de configuração de banco de dados
    • 27. 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
  • 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 lógica de negócio do modelo
      • 32. Cada classe de domínio corresponde à uma tabela do banco de dados relacional
  • 33. MVC - Grails
    • C ontroller: Toda regra de negócio fica no controller.
      • grails-app/controller
      • 34. grails create-controller
      • 35. action: São clousures que irão receber as requisições e fazer alguma coisa
        • def actionQueFazAlgumaCoisa = { render “o/” }
  • 36. MVC - 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}”
        • }
  • 37. MVC - Grails
    • Controller
      • render: renderiza uma resposta
      • 38. redirect: redireciona uma ação usando HTTP redirect
        • def actionQueRedireciontaPraOutraAction = {
          • 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/<domain>/
        • 42. <% %> ou <%= %>
      • Utilizam a GSP taglib
        • Evita misturar código de programação com linguagem de marcação
        • 43. Semelhando ao JSP
          • def show = { [book:Book.get(params.id)]}
          • 44. <%= book.title %>
  • 45. MVC - Grails
    • Views
      • Loops
        • <g:each in=”${livros}”>
          • <p>Título: ${it.titulo}</p>
        • </g:each>
        • 46. <g:each in=”${livros}” var=”livro”>
          • <p>Título: ${livro.titulo}</p>
        • </g:each>
  • 47. MVC - Grails
    • Views
      • Condições
        • <g:if test=”${nome == 'tr00'}”>
          • Hello, ${tr00}
        • </g:if>
        • 48. <g:else>
          • --- faz alguma coisa
        • </g:else>
        • 49. <g:elseif test=”2 % 2 == 0”>
          • – faz outra coisa
        • </g:elseif>
  • 50. Service - Grails
    • Services
      • grails create-service
      • 51. grails-app/services/
      • 52. Centraliza a regra de negócio
      • 53. Compartilha a mesma regra com classes de domínio que possuam essa lógica
      • 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 não
          • 57. Consistência - o banco de dados deve permanecer consistente antes e depois de uma operação
          • 58. Isolação – uma transação está isolada das outras operações
          • 59. Durabilidade – desde que a transação esteja feita, isso garante que a transação não possa ser desfeita
  • 60. Scaffolding - Grails
    • Scaffolding
      • Permite criar rapidamente interfaces de CRUD para classes de domínio que estejam definidas
      • 61. Ótimo para prototipação
  • 62. 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
      • 63. grails generate-controller : cria o controlador para uma classe de domínio específica
      • 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 domínio representa uma tabela do banco de dados
      • 69. Uma instância 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 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.
  • 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. Não precisa extender de ninguém, não precisa de annotations.
      • 78. grande semelhança com o ActiveRecord
  • 79. GORM - Grails
    • Métodos do GORM
    • Buscadores dinâmicos
  • 83. GORM - Grails
    • Buscadores dinâmicos
      • FindBy*
        • Usuario.findByUsernameAndPassword(“mock”,”mocklogin”)
      • FindAllBy*
        • Usuario.findAllByGroup(Group.get(1))
      • FindWhere, findAllWhere
        • Usuario.findWhere([ &quot;username&quot;: &quot;mock&quot;, login: &quot;mocklogin&quot;])
    • HQL – Hibernate Query Language
      • User.find(“from User where login = :login and senha = :senha”, [“mock”,”mocklogin”])
      • 84. Parâmetros:
        • 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
        • Player hasOne club
      • HasMany
      • 93. - club hasMany players
        • Métodos dinâmicos
        • 94. Club.addToPlayers(new Player())
        • 95. Club.removeFromPlayers(Player.get(1L))
      • BelongsTo
        • Player belongsTo clube
  • 96. i18n - Grails
    • Internacionalização i18N
      • grails-app/i18n/
      • 97. Permite exibir mensagens no idioma de preferência do usuário
      • 98. Os arquivos .properties
  • 99. Testes - Grails
    • Testes
      • Sempre que uma um controller, service ou classe domínio é criada, é criada uma classe de teste de integração correspondente
      • 100. Usa o Junit e o Canoo por baixo dos panos
      • 101. Permite fazer:
        • Testes unitários
        • 102. Testes de integração
        • 103. Testes funcionais
      • A aplicação 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 Integração != teste Unitário
      • 107. Testes unitários no grails são criados com o comando:
        • grails create-unit-test
        • 108. tests/unit/
      • nos testes unitários os métodos dinâmicos como save, findBy* não estão disponíveis
      • 109. O grails faz isso pra ajudar você a diferenciar testes unitários e de integração
      • 110. testes unitários se preucupam em testar apenas uma parte do código e não o problema como um todo
  • 111. Testes - Grails
      mas como testar sem os métodos dinâmicos?
  • 112. Testes - Grails
    • Testes
      • Aí entram em cena o MockFor* e o StubFor*
      • 113. http://groovy.codehaus.org/Groovy+Mocks
  • 114. 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.
      • 115. 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
      • 116. Uma pergunta tem um usuário ( quem perguntou ) e várias respostas
      • 117. Uma resposta pertence a uma pergunta e possui vários usuários ( quem respondu )

×