Groovy grails

  • View
    1.839

  • Download
    2

Embed Size (px)

Transcript

  • 1. Groovy e Grails Lucas Aquiles @lucas_aquiles

2. O Grails

  • Inspirao
  • Conveno ao invs de configurao

3. RubyonRails, Django, TurboGears Construdo 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 viso

  • GSP (Groovy Server Pages)

8. TagLib dinmicas e SiteMesh Camada de controle:

  • Baseado no Spring MVC / Spring Web Flow

Dependency Injection (DI)

  • Spring Container

Internacionalizao (i18n) 9. 10. Grails - Instalao e Configurao

  • 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 bsicos
  • grailscreate-appAppDemo

16. grailscreate-domain-classbr.edu.ifpi.MinhaClass 17. grailscreate-controllerbr.edu.ifpi.MinhaClass 18. grailscreate-servicebr.edu.ifpi.MinhaClass 19. grailsgenerate-all// gera as views os controlleres 20. grailsschema-export// expora o esquema de tabelas 21. grailsconsole// abre o console do groovy 22. grailsclean// limpa ateraes 23. grailsrun-app// roda a aplicao 24. Grails - Estrutura Arquivos de configurao: DataSource.groovy Config.groovy Bootstrap.groovy internacionalizao web.xml Libs adicionais: ex mysql-connector.jar 25. DataSource - Grails

  • DataSource - Arquivo de configurao de banco de dados

26. Configurado por padro com o HSQLDB

  • Um banco de dados leve, usado para testes

Possui trs 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 lgica de negcio do modelo 31. Cada classe de domnio corresponde uma tabela do banco de dados relacional 32. M VC - Grails

  • Constrains
  • Usadas para determinar o tipo de entrada dos campos
  • static constraints = {
    • loginblank:false, size:1..20, matches:'[a-z0-9]'
  • 33. passwordblank:false, size:1..6

34. emailemail: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 domnio representa uma tabela do banco de dados 38. Uma instncia 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 implementao do JPA, mapea a classe no arquivo de configurao,cria uma fabrica de sesses, 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. No precisa extender de ningum, no precisa de annotations. 47. grande semelhana com o ActiveRecord 48. GORM - Grails

  • Mtodos do GORM
  • save()

49. list() 50. delete() 51. get(Object o) Buscadores dinmicos 52. GORM - Grails

  • Buscadores dinmicos
  • 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. Parmetros:

  • 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

  • PlayerhasOneTeam

HasMany 62. - TeamhasManyplayers

  • Mtodos dinmicos

63. teamInstance.addToPlayers(new Player(name:derpson)) 64. teamInstance.removeFromPlayers(Player.get(1L)) BelongsTo

  • PlayerbelongsToTeam

65. MV C- Grails

  • C ontroller: Toda regra de negcio fica no controller.
  • grails-app/controller

66. grails create-controller 67. action:So clousures que iro receber as requisies e fazer alguma coisa

  • def actionQueFazAlgumaCoisa = {render me gusta! }

68. MV C- Grails

  • Controller
  • params: um map (hash) de parmetros de uma requisio
  • defactionQuePegaOParamsEExibe = {
  • render parametros: ${params}

} flash:map temporrio que armazena objetos da seo, o hash limpo a cada nova requisio

  • def actionQueMostraOFlashMessage = {
  • flash.message = ${params}

} 69. MV C- Grails

  • Controller
  • render:renderiza uma resposta

70. redirect:redireciona uma ao usando HTTP redirect

  • defactionQueRedireciontaPraOutraAction = {
  • 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//

74. ou Utilizam a GSP taglib

  • Evita misturar cdigo de programao com linguagem de marcao

75. Semelhando ao JSP

  • def show = { [book:Book.get(params.id)]}

76. 77. M V C- Grails

  • Views
  • Loops
  • Ttulo: ${it.titulo}

78.

  • Ttulo: ${livro.titulo}

79. M V C- Grails

  • Views
  • Condies
  • Hello, ${tr00}

80.

  • --- faz alguma coisa

81.

  • faz outra coisa

82. Service - Grails

  • Services
  • grails create-service

83. grails-app/services/ 84. Centraliza a regra de negcio 85. Compartilha a mesma regra com classes de domnio que possuam essa lgica 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 no

89. Consistncia-o banco de dados deve permanecer consistente antes e depois de uma operao 90. Isolao uma transao est isolada das outras operaes 91. Durabilidade desde que a transao esteja feita, isso garante que a transao no possa ser desfeita 92. Scaffolding - Grails

  • Scaffolding
  • Permite criar rapidamente interfaces de CRUD para classes de domnio que estejam definidas

93. timo para prototipao 94. Scaffolding - Grails

  • Scaffolding dinmico:
  • def scaffolding = MyDomainClass

Scaffolding esttico

  • grails genreate-views:gera as views para uma classe de domnio especfica

95. grails generate-controller : cria o controlador para uma classe de domnio especfica 96. grails generate-all : cria os controlers + views 97. ex: grails generate-all br.edu.ifpi.beans.Aluno 98. i18n - Grails

  • Internacionalizao i18N
  • grails-app/i18n/

99. Permite exibir mensagens no idioma de preferncia do usurio 100. Os arquivos .properties 101. Testes - Grails

  • Testes
  • Sempre que uma um controller, service ou classe domnio criada, criada uma classe de teste de integrao correspondente

102. Usa o Junit e o Canoo por baixo dos panos 103. Permite fazer: