• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Groovy grails
 

Groovy grails

on

  • 2,046 views

 

Statistics

Views

Total Views
2,046
Views on SlideShare
2,045
Embed Views
1

Actions

Likes
2
Downloads
52
Comments
0

1 Embed 1

http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Groovy grails Groovy grails Presentation Transcript

    • Groovy e Grails Lucas Aquiles @lucas_aquiles
    • O Grails
      • Inspiração
        • Convenção ao invés de configuração
        • RubyonRails, Django, TurboGears
      • Construído sobre gigantes
        • Java / JEE
        • Spring Framework
        • Hiberante
      • Reduz a complexidade
      • Aumento da produtividade
    • O Grails
      • GORM
        • Baseado no Hiberante
      • Camada de visão
        • GSP (Groovy Server Pages)
        • TagLib dinâmicas e SiteMesh
      • Camada de controle:
        • Baseado no Spring MVC / Spring Web Flow
      • Dependency Injection (DI)
        • Spring Container
      • Internacionalização (i18n)
    •  
    • Grails - Instalação e Configuração
      • http://www.grails.org/Downloads
        • Descompacte o arquivo e configure o GRAILS_HOME
        • “Hello Grails”
          • grails create-app helloword
          • grais create-controller HelloWord
          • grails- app/controllers/helloword/HelloWordController.groovy
          • def helloword = { render “meu 123487 hello word!” }
    • Comandos - Grails
      • Comandos básicos
        • grails create-app AppDemo
        • grails create-domain-class br.edu.ifpi.MinhaClass
        • grails create-controller br.edu.ifpi.MinhaClass
        • grails create-service br.edu.ifpi.MinhaClass
        • grails generate-all // gera as views os controlleres
        • grails schema-export // expora o esquema de tabelas
        • grails console // abre o console do groovy
        • grails clean // limpa aterações
        • grails run-app // roda a aplicação
    • Grails - Estrutura Arquivos de configuração: DataSource.groovy Config.groovy Bootstrap.groovy internacionalização web.xml Libs adicionais: ex mysql-connector.jar
    • DataSource - Grails
      • DataSource - Arquivo de configuração de banco de dados
      • 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
    • DataSource - Grails
    • M VC - Grails
      • M odelo – Tudo que será usado como Entidade ficá aqui.
        • /grails-app/domain/
        • grails create-domain-class
        • Separar a lógica de negócio do modelo
        • Cada classe de domínio corresponde à uma tabela do banco de dados relacional
    • 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]'
              • password blank:false, size:1..6
              • email email:true, nullable:false
          • }
    • M VC - Grails
      • GORM
        • Hibernate por baixo dos panos
        • Permite fazer o mapeamento objeto / relacional do modelo orientado a objetos com o banco de dados relacional
        • Cada classe de domínio representa uma tabela do banco de dados
        • Uma instância representa uma linha da tabela
        • Cada atributo da classe representa uma coluna da tabela
    • 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.
    • TUDO ISSO?
    • GORM - Grails
      • Com o GORM do grails
        • grails create-domain-class Usuario
        • grails console
        • def usuario = new User(login:”tr00”,password:”tr00”)
        • usuario.save()
        • Não precisa extender de ninguém, não precisa de annotations.
        • grande semelhança com o ActiveRecord
    • GORM - Grails
      • Métodos do GORM
        • save()
        • list()
        • delete()
        • get(Object o)
      • Buscadores dinâmicos
    • 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”])
        • Parâmetros:
          • max, sort , order
    • 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()
    • GORM - Grails
      • Usando Criteria do Hibernate
      • Uma das mais poderosos de de busca
        • get : retorna uma instancia da query
        • list : retorna uma lista de instancias
        • count : retorna um total de resultados como um inteiro da query
        • def c = DomainClass.createCriteria()
        • def result = c.list{ eq('nome','tr00' }
    • 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
        • - Team hasMany players
          • Métodos dinâmicos
          • teamInstance.addToPlayers(new Player(name:”derpson”))
          • teamInstance.removeFromPlayers(Player.get(1L))
        • BelongsTo
          • Player belongsTo Team
    • MV C - Grails
      • C ontroller: Toda regra de negócio fica no controller.
        • grails-app/controller
        • grails create-controller
        • action: São clousures que irão receber as requisições e fazer alguma coisa
          • def actionQueFazAlgumaCoisa = { render “me gusta!” }
    • 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}”
          • }
    • MV C - Grails
      • Controller
        • render: renderiza uma resposta
        • redirect: redireciona uma ação usando HTTP redirect
          • def actionQueRedireciontaPraOutraAction = {
            • redirect(controller:meuController, action:”outraAction”)
          • }
    • MV C - Grails
      • Controller
        • scaffolding
          • cria a estrura de CRUD para aquele modelo
          • def scaffolding = MinhaClasseDeDominio
    • M V C - Grails
      • Views
        • crails create-view
          • grails-app/views/<domain>/
          • <% %> ou <%= %>
        • Utilizam a GSP taglib
          • Evita misturar código de programação com linguagem de marcação
          • Semelhando ao JSP
            • def show = { [book:Book.get(params.id)]}
            • <%= book.title %>
    • M V C - Grails
      • Views
        • Loops
          • <g:each in=”${livros}”>
            • <p>Título: ${it.titulo}</p>
          • </g:each>
          • <g:each in=”${livros}” var=”livro”>
            • <p>Título: ${livro.titulo}</p>
          • </g:each>
    • M V C - Grails
      • Views
        • Condições
          • <g:if test=”${nome == 'tr00'}”>
            • Hello, ${tr00}
          • </g:if>
          • <g:else>
            • --- faz alguma coisa
          • </g:else>
          • <g:elseif test=”2 % 2 == 0”>
            • – faz outra coisa
          • </g:elseif>
    • Service - Grails
      • Services
        • grails create-service
        • grails-app/services/
        • Centraliza a regra de negócio
        • Compartilha a mesma regra com classes de domínio que possuam essa lógica
        • Injetado automaticamente no controller pelo Spring
    • Service - Grails
      • Services
        • Transactions
        • transactional = true
          • Essencial para manter a integridade do banco de dados via ACID;
            • Atomicidade – A terefa foi completa ou não
            • Consistência - o banco de dados deve permanecer consistente antes e depois de uma operação
            • Isolação – uma transação está isolada das outras operações
            • Durabilidade – desde que a transação esteja feita, isso garante que a transação não possa ser desfeita
    • Scaffolding - Grails
      • Scaffolding
        • Permite criar rapidamente interfaces de CRUD para classes de domínio que estejam definidas
        • Ótimo para prototipação
    • 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
        • grails generate-controller : cria o controlador para uma classe de domínio específica
        • grails generate-all : cria os controlers + views
        • ex: grails generate-all br.edu.ifpi.beans.Aluno
    • i18n - Grails
      • Internacionalização i18N
        • grails-app/i18n/
        • Permite exibir mensagens no idioma de preferência do usuário
        • Os arquivos .properties
    • Testes - Grails
      • Testes
        • Sempre que uma um controller, service ou classe domínio é criada, é criada uma classe de teste de integração correspondente
        • Usa o Junit e o Canoo por baixo dos panos
        • Permite fazer:
          • Testes unitários
          • Testes de integração
          • Testes funcionais
        • A aplicação vai trabalhar como esperado
        • A classe de testes extendem de GroovyTestCase
        • Permite o uso de assert*, setUp e tearDown
    • Tests - Grails
      • Testes
        • Teste de Integração != teste Unitário
        • Testes unitários no grails são criados com o comando:
          • grails create-unit-test
          • tests/unit/
        • nos testes unitários os métodos dinâmicos como save, findBy* não estão disponíveis
        • O grails faz isso pra ajudar você a diferenciar testes unitários e de integração
        • testes unitários se preucupam em testar apenas uma parte do código e não o problema como um todo
    • Testes - Grails
        mas como testar sem os métodos dinâmicos?
    • Testes - Grails
      • Testes
        • Aí entram em cena o MockFor* e o StubFor*
        • http://groovy.codehaus.org/Groovy+Mocks
    • Um exemplo de App Grails Serviço de url customizada e estatísticas de acesso http://4gplus.me
    • 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.
        • 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
        • Uma pergunta tem um usuário ( quem perguntou ) e várias respostas
        • Uma resposta pertence a uma pergunta e possui vários usuários ( quem respondu )