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

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

Laboratório Natalnet Groovy e Grails Hugo Sena. Laboratório Natalnet Hugo Sena © NatalNet/UFRN Groovy Linguagem Livre Scripts é o grande foco Suporte.

Apresentações semelhantes


Apresentação em tema: "Laboratório Natalnet Groovy e Grails Hugo Sena. Laboratório Natalnet Hugo Sena © NatalNet/UFRN Groovy Linguagem Livre Scripts é o grande foco Suporte."— Transcrição da apresentação:

1 Laboratório Natalnet Groovy e Grails Hugo Sena

2 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 2

3 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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. 3

4 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 4

5 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 = new java.util.Date() –println x 5

6 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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() 6

7 Laboratório Natalnet Hugo Sena © NatalNet/UFRN Groovy – Código Compacto 7 Código Java Código Groovy

8 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 8

9 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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. 9

10 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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. 10

11 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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. 11

12 Laboratório Natalnet Biblioteca Virtual Simplificada MÃOS NA MASSA

13 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 13

14 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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: 14

15 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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. 15

16 Laboratório Natalnet Hugo Sena © NatalNet/UFRN Configurando a Base de Dados Caso a base de Dados seja Mysql, o DataSource poderá ser: 16

17 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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: –http://localhost:8080/library/http://localhost:8080/library/ Grails permite a migração da aplicação, gerando arquivos de deploy WAR: –grails war prod Library.war 17

18 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 18

19 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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%") 19

20 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 } 20

21 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 } 21

22 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 22

23 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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. 23

24 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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() 24

25 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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. 25

26 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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() } } 26

27 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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. 27

28 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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()] } } 28

29 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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 = {} } 29

30 Laboratório Natalnet Hugo Sena © NatalNet/UFRN 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')]) } } 30


Carregar ppt "Laboratório Natalnet Groovy e Grails Hugo Sena. Laboratório Natalnet Hugo Sena © NatalNet/UFRN Groovy Linguagem Livre Scripts é o grande foco Suporte."

Apresentações semelhantes


Anúncios Google