A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Groovy e Grails Hugo Sena.

Apresentações semelhantes


Apresentação em tema: "Groovy e Grails Hugo Sena."— Transcrição da apresentação:

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 simplesmente renomear um arquivo .java para .groovy e irá funcionar (isso provoca supresa em algumas pessoas ). Torna as curvas de aprendizado para usuários Java, praticamente 0, pois eles podem começar com a sintaxe Java e migrar gradualmente para Groovy. Suporte nativo para linguagens de Marcação como 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: Exemplos:
groovyconsole grails console (depois que um projeto tenha sido criado) Exemplos: println “Hello, World!” 123+45*67 x = 1 println x x = new java.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, ] println myList[0] println myList.size() scoreMap = [ "Brett": 100, "Pete": "Did not finish", "Andrew": ] println scoreMap[0] println scoreMap.size() println scoreMap["Pete"] println scoreMap.Pete scoreMap["Pete"] = 3 println scoreMap.Pete emptyMap = [:] emptyList = [] println emptyMap.size() println emptyList.size()

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

8 Groovy – Closures Groovy Closures:
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 def square = { numberToSquare -> numberToSquare * numberToSquare } print square.call(2) fullString = "“ orderParts = ["BUY", 200, "Hot Dogs", "1"] orderParts.each { fullString += it + " " } println fullString

9 Grails Groovy on Rails Framework para web baseado no Ruby on Rails, 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 Biblioteca Virtual Simplificada
MÃOS NA MASSA Biblioteca Virtual Simplificada

13 Instalação do Grails Pré-requisitos: Instalação: JAVA_HOME 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: grails create-app library 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: grails run-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: Grails permite a migração da aplicação, gerando arquivos de deploy WAR: grails war prod Library.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 Object Relational Mapping) 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 = new Book(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. def bookCount = 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: grails create-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: grails create-controller Book Apenas cria um documento com a declaração do BookController na pasta grails-app/controller do projeto Grails No nosso caso: class BookController { def scaffold = 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: 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: grails generate-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 {static belongsTo = Face } one-to-many, class Author { static hasMany = [ books : Book ] String name } many-to-one, class Book { static belongsTo = Author Author author } many-to-many (Scaffold não funciona) class Aluno { static hasMany = [disciplinas:Disciplina] } class Disciplina { static hasMany = [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 { static transients = [ "digitalCopy" ] File digitalCopy } Método toString Define como um objeto será tratado quando houver um relacionamento Ex: class Author { 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 { static constraints = { 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 { static mapping = { columns { synopsis type:'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: class PersonController { // action1 pode ser acessada via método POST // action2 não tem restrições // action3 pode ser acessada via método POST ou DELETE static allowedMethods = 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: class BookController { static defaultAction = "list" def list = { [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: class BookController { def show { def book = Book.get(params.id) } def stephen = { render(view: "show", model: [book: new Book(author: 'Stephen King', name: 'Carrie')]) } }


Carregar ppt "Groovy e Grails Hugo Sena."

Apresentações semelhantes


Anúncios Google