Produtividade na web_com_groovy_e_grails_pt2

  • 810 views
Uploaded on

Slides da apresentação s

Slides da apresentação s

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

Views

Total Views
810
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

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