1 / 30

Groovy e Grails

Groovy e Grails. Hugo Sena. Groovy. Linguagem Livre Scripts é o grande foco Suporte ao paradigma da Orientação a Objetos Roda na JVM Possui grande integração com a plataforma Java Uso de frameworks próprios de Java são facilmente portáveis para Groovy : Ex: Hibernate , Spring , etc.

rollin
Download Presentation

Groovy e Grails

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Groovy e Grails Hugo Sena

  2. Groovy • Linguagem Livre • Scripts é o grande foco • Suporte ao paradigma da Orientação a Objetos • Roda na JVM • Possui grande integração com a plataforma Java • Uso de frameworks próprios de Java são facilmente portáveis para Groovy: • Ex: Hibernate, Spring, etc. • Desenvolvida como alternativa a Linguagem Java • Possui características de Python, Ruby e Smalltalk • Compila dinamicamente para bytecodes Java

  3. Groovy • Basicamente um superconjunto da Linguagem Java • Pode-se simplesmenterenomear um arquivo .java para .groovy e iráfuncionar (issoprovocasupresaemalgumaspessoas). • Torna as curvas de aprendizadoparausuários Java, praticamente 0, poiselespodemcomeçar com a sintaxe Java e migrargradualmentepara Groovy. • Suportenativoparalinguagens de Marcaçãocomo XML e HTML, com suporte a DOM.

  4. Groovy – Características • Tipagem estática e dinâmica • Sintaxe nativa para listas, arrays associativos, vetores, expressões regulares, interações polimórficas, • Closures - blocos de código reutilizáveis • Sobrecarga de operadores • Vantagem: Simplifica o trabalho com Collections e Maps • Desvantagem: Pode dificultar o entendimento do código • Extensão da biblioteca padrão da Java através do GDK • Ex: Desenvolvimento bastante simples de interfaces com o usuário • Operador de navegação seguro “?” • Verifica automaticamente se um elemento é nulo. • Ex: “objeto?.metodo()” ou “objeto?.campo”

  5. Groovy – Exemplos • Acesse o groovy através dos comandos: • groovyconsole • grails console (depois que um projeto tenha sido criado) • Exemplos: • println “Hello, World!” • 123+45*67 • x = 1 println x • x = newjava.util.Date() • println x

  6. Groovy – Exemplos • Listas e Mapas • Listas podem ser representadas como vetores • Mapas podem definir os índices • Exemplos: • myList = [1776, -1, 33, 99, 0, 928734928763]printlnmyList[0]printlnmyList.size() • scoreMap = [ "Brett": 100, "Pete": "Did not finish", "Andrew": 86.87934 ]printlnscoreMap[0]printlnscoreMap.size()println scoreMap["Pete"] println scoreMap.PetescoreMap["Pete"] = 3printlnscoreMap.Pete • emptyMap = [:] emptyList = []printlnemptyMap.size() printlnemptyList.size()

  7. Groovy – Código Compacto Código Java Código Groovy

  8. Groovy – Closures • GroovyClosures: • Uma closure é uma ou mais linhas de código cercadas por chaves. A principal diferença entre uma closure e um método é que a closure não necessita de uma classe ou um nome de método. • Exemplos: • square = { it * it } println square(9)z = [ 1, 2, 3, 4 ].collect(square)print z • defsquare = { numberToSquare -> numberToSquare * numberToSquare} printsquare.call(2) • fullString = "“orderParts = ["BUY", 200, "Hot Dogs", "1"] orderParts.each { fullString += it + " " } printlnfullString

  9. Grails • GroovyonRails • Framework para web baseado no RubyonRails, para desenvolvimento em Groovy. • Pretende ser um framework de alta produtividade seguindo o paradigma de “convenção por codificação” • Classes de domínio tem seus atributos mapeados como campos no BD • Utiliza variáveis reservadas para identificar configurações • Esconde muito detalhes de configuração que não interessam ao desenvolvedor • Grails foi desenvolvido para ser fácil de aprender, fácil de desenvolver aplicações e ser extensível, buscando oferecer consistência e características poderosas.

  10. Grails – Objetivos • Ser um framework web de alta produtividade para a plataforma Java • Sem configuração XML. • Ambiente de desenvolvimento pronto pra usar. • Funcionalidades disponíveis através de mixins. • Mixins são métodos que são adicionados dinamicamente a uma classe quando ela é compilada. • Permite ao desenvolvedor realizar operações sem precisar implementar interfaces ou estender classes base. • Ex: Métodos save, delete e find das classes de Domínio. • Re-uso de tecnologias Java tais como Spring e Hibernate através de simples interfaces. • Ser um framework consistente que reduz a confusão das configurações e é fácil de aprender.

  11. Grails – Características • Oferece a documentação das partes do framework que interessam ao usuário. • Criação de Templates facilitada pelo uso do GSP (Groovy Server Pages). • GSP possui sintaxe bastante parecida com o JSP • Permite a criação de Bibliotecas de Tags. • Suporta AJAX. • Suporta JSP • Provê um modo de desenvolvimento completo, incluindo servidor web e carregamento dinâmico de recursos. • Utiliza o paradigma MVC.

  12. MÃOS NA MASSA Biblioteca Virtual Simplificada

  13. Instalação do Grails • Pré-requisitos: • JAVA_HOME • Instalação: • Download • Define GRAILS_HOME • Adiciona GRAILS_HOME/bin ao PATH • Digita “grails xxx” na linha de comando

  14. Criando o Projeto • Para criar o projeto em Grails, basta executar o seguinte comando grails: • grailscreate-applibrary • O grails cria automaticamente os seguintes diretórios:

  15. Configurando a Base de Dados • O arquivo DataSource.groovy da pasta grails-app/conf contêm um conjunto de closures que armazenam as configurações da base de dados • O Grails disponibiliza 3 ambientes diferentes para a aplicação web: • Development • TestData • Production • Por padrão todas as bases de dados são configuradas com uma base de dados HSQLDB persistindo na memória. • Ideal para testar, mas inviável para realizar o deployment • Pode ser opcional • Consiste em apenas mudar apenas alguns valores e colocar o arquivo jar do Driver na pasta lib.

  16. Configurando a Base de Dados • Caso a base de Dados seja Mysql, o DataSource poderá ser:

  17. Rodando a aplicação • Para rodar a aplicação execute o seguinte comando grails: • grailsrun-app • O grails traz embutido o servidor de aplicações jetty e o banco HSQLDB que salva os dados na memória RAM. • No nosso caso estamos utilizando o mysql. • Acesse: • http://localhost:8080/library/ • Grails permite a migração da aplicação, gerando arquivos de deploy WAR: • grailswarprodLibrary.war

  18. Grails – Paradigma MVC • Modelo • A representação "domínio" específica da informação em que a aplicação opera. • Ex: aluno, professor e turma fazem parte do domínio de um sistema acadêmico. • Classes de Domínio • São persistidas no banco de dados usando GORM (Grails ObjectRelationalMapping) • Classes de domínio são salvas no diretório de grails-app/domain • Apenas isto é necessário para que a persistência dessa classe seja gerenciada pelo Grails, o resto o GORM faz a “mágica” • O GORM adiciona vários métodos estáticos e instanciados para realizar a persistência • Anti-Padrão: Active-Record

  19. Grails – Paradigma MVC • Modelo • Métodos carregados (Mixin) • O método save() salva o objeto no banco de dados • def book = newBook(title: "The Da Vinci Code", author: Author.findByName("Dan Brown")) book.save() • O método delete() apaga o objeto no banco de dados • def book = Book.findByTitle("The Da Vinci Code") book.delete() • O método count() retorna o número de registros no banco de dados para uma determinada classe. • defbookCount = Book.count() • O método find(parâmetro) retorna o primeiro objeto da base de dados que satisfaz o parâmetro (Sintaxe HQL) • def book = Book.find("from Book b where b.title = ?", [ 'The Da Vinci Code' ]) • O método findBy*() retorna o primeiro objeto da base de dados que satisfaz um padrão específico. • def book = Book.findByTitle("The Da Vinci Code") • def book = Book.findByTitleLike("%Da Vinci%")

  20. Criando uma Classe de Domínio • Entre no diretório raiz do projeto e utilize o comando grails: • grailscreate-domain-class Book • Este comando cria um arquivo chamado Book.groovy na pasta grails-app/domain • Edite o arquivo Book.groovy e adicione o seguinte código: • class Book { String title int ISBN String synopsis Date publicationDate}

  21. Grails – Paradigma MVC • Controle • Processa e responde a eventos ou ações. • Pode invocar alterações no Model. • Valida e filtra dados do usuário. • Para criar um controller basta executar o comando grails: • grailscreate-controller Book • Apenas cria um documento com a declaração do BookController na pasta grails-app/controller do projeto Grails • No nosso caso: • classBookController { defscaffold = true}

  22. Scaffolding • Grails suporta Scaffolding (gera automaticamente visões e controles para operações CRUD) dinâmico e estático. • Dinâmico – gerado em tempo de execução • Qualquer classe de domínio pode ser scaffolded, basta criar um controller como o mostrado no slide anterior • Criando apenas este controller já é possível realizar operações CRUD em: http://localhost:8080/library/book • Não permite edição das visões e controle • Estático • Gera os arquivos: • Templates de visão - list.gsp, create.gsp, edit.gsp e show.gsp na pasta grails-app/views/book • Controller - BookController.groovy na pasta grails-app/controllers • Para realizar o scaffold estático basta executar o comando grails: • grailsgenerate-all Book • Permite edição das visões e controle

  23. Grails – Paradigma MVC • Visão • Grails suporta JSP e GSP (Groovy Server Pages). • Camada responsável pela interação com o usuário • Ex: Listar todos os livros da Classe de Domínio Book para o usuário • Este arquivo deve ser salvo no seguinte diretório: grails-app/views/book/list.gsp do projeto Grails • Este local é mapeado pelo controlador BookController como a ação list.

  24. Grails – Relacionamentos • One-to-one, • class Face { Nose nose } class Nose {staticbelongsTo = Face } • one-to-many, • classAuthor { statichasMany = [ books : Book ] String name} • many-to-one, • class Book { ...staticbelongsTo = AuthorAuthorauthor} • many-to-many (Scaffold não funciona) • class Aluno { statichasMany = [disciplinas:Disciplina] } • class Disciplina { statichasMany = [alunos:Aluno] } • new Aluno(..).addDisciplina(Disciplina.get(..)).save() • new Disciplina(..).addAluno(Aluno.get(..)).save()

  25. Grails – convention over configuration • Propriedade transients • Define os atributos que não serão persistidos no banco • Ex:class Book { ...statictransients = [ "digitalCopy" ] File digitalCopy} • Método toString • Define como um objeto será tratado quando houver um relacionamento • Ex:classAuthor { ... String toString() { return "$name" } } • Um scaffold da classe Book que tem relacionamento com Author irá exibir o título do livro no relacionamento.

  26. Grails – Closure de Modelo - constraints • Variável reservada constraints: • Permite a definição declarativa de constantes de validação • Permite definir a ordem dos campos dos formulários quando se usa scaffold • Exemplo: • class Book { ...staticconstraints = {title(blank:false, nullable:false, size:5..150) ISBN()synopsis(widget:'textarea')publicationDate()author() } }

  27. Grails – Closure de Modelo - mapping • A propriedade estática mappingé usada para ensinar ao GORM como ele deve mapear o modelo. • Exemplo: • class Book { ...staticmapping = { columns { synopsistype:'text' } } } • As vezes é necessário apagar a tabela para que as alterações sejam realizadas com sucesso.

  28. Grails – Propriedades de Controller • allowedMethods • Limita o acesso as ações do controller baseado no método de requisição HTTP. • Ex: classPersonController { // action1 pode ser acessada via método POST // action2 não tem restrições // action3 pode ser acessada via método POST ou DELETE staticallowedMethods = action1:'POST', action3:['POST', 'DELETE'] def action1 = { … } def action2 = { … } def action3 = { … } } • defaultAction • Permite definir a ação padrão que será chamada caso nenhuma ação seja especificada na URL. • Ex: classBookController { staticdefaultAction = "list" deflist = { [books:Book.list()] } }

  29. Grails – Propriedades de Controller • redirect • Redireciona o fluxo de uma ação para outra usando um redirect HTTP • flash • Guarda objetos de sessão para apenas a próxima requisição, destruindo depois que a requisição é completada. • Muito útil para exibir mensagens de sucesso ou erro. • Ex: • class BookController { def index = { flash.message = "Welcome!" redirect(action:home) } def home = {} }

  30. Grails – Propriedades de Controller • params • Um mapa (hash) multi-dimensional que guarda os dados enviados pelos formulários • render • Permite criar várias formas de resposta, desde simples texto, até visões e templates • Ex:classBookController {def show { def book = Book.get(params.id) } def stephen = { render(view: "show", model: [book: new Book(author: 'Stephen King', name: 'Carrie')]) } }

More Related