de Sistemas – IFSP Campus São Carlos Experiência Profissional Estágio em desenvolvimento de software UFSCAR(2013-2014) Analista de Sistemas Expert Project (2014) Analista Programador jr – Virgos Ip Solutions(2015) Analista de Sistemas – ImaxGames (2015 - ?) 2
para monitoramento e gerenciamento de entregas de produtos JSF + EJB + JPA Organização muito dependente do desenvolvedor, pode variar de projeto para projeto Muitos arquivos XML (configurações) 3
em julho de 2005, inspirado no Ruby on Rails Originalmente o nome era Groovy on Rails Versão 0.1 saiu em 29 de março de 2006 Versão 1.0 saiu em 04 de fevereiro de 2008 Atualmente a versão mais recente é a 3.1.6 Projeto é patrocinado e liderado pela OCI , mas ja foi patrocinado pela pivotal 10
dinâmica que roda na JVM 2º Linguagem padrão da plataforma Java Pode ser usada como linguagem de scripts Suporta sintaxe da linguagem Java Favorece legibilidade Menos codigo para produzir mais 12
def numeros = [] l numeros.each{ l println it l //it é uma palavra reservada que l //faz referência a cada elemento da lista l } l def estados = ["SP":"São Paulo","RJ":"Rio de Janeiro","MG":"Minas Gerais"] l estados.each{ sigla, nome -> l println sigla + " - " + nome l } 15
new Date() l //Capturando o próximo dia l def data = new Date() l println data+1 l //Capturando o dia anterior l def data = new Date() l println data-1 l //Convertendo String em Data l def data = Date.parse('dd/MM/yyyy', '31/12/1980') 16
Ao invés de fazer toda a configuração explicitamente em arquivos XML, o nome e a localização dos arquivos indicam sua função. Sempre que possível siga as convenções. DRY (Don’t Repeat Yourself) – No Grails existe um conjunto organizado de artefatos disponíveis para os desenvolvedores, além de geradores de código fonte. Além disso, o Grails favorece a adoção do DRY nos projetos. MVC (Model-View-Controller) – Padrão arquitetural de software que se baseia na divisão do software em camadas com funções bem definidas. 20
e pelas regras do negócio Responsável pela organização dos dados e pelas regras do negócio Responsável apresentação e visualização dos dados Responsável apresentação e visualização dos dados Responsável pela integração entre as camadas de Visão e Modelo Responsável pela integração entre as camadas de Visão e Modelo
usuário envia um pedido de url 2. O controlador pede dados ao Modelo 3. O modelo devolve os dados pedidos 4. O controlador seleciona a visão e fornece os dados 5. A visão selecionada é devolvida ao controlador 6. O controlador devolve a visão como resposta para o browser
Grails 23 Classes de domínio e Serviços fazem parte do Modelo Controllers fazem parte do Controlador Views e Taglibs fazem parte do Controlador Codecs e classes específicas do Grails “Dicionários” para internacionalizaç ão Arquivos de Configuração Código Java! Código Groovy “genérico” Testes unitários Testes de integração
Tudo que está no classpath, como bibliotecas Nome e versão da aplicação, versão do Grails Recursos como CSV, javascripts e imagens WEB-INF, META-INF Grails Wrapper
próprios que são mapeados e armazenados em um banco de dados, normalmente relacional Podem apresentar alguns tipos de relacionamento: Herança Dependência 1 para muitos 1 para 1 25
com as actions Realizam algum trabalho sobre a requisição (por exemplo chamar uma classe de domínio ou serviço) Escolher o tipo de resposta: Executar outra ação de controller (própria ou não) Renderizar uma visão (GSP) Renderizar informação diretamente 29
terminar com a palavra Controller Ficam dentro do diretório controllers Tipo padrão é prototype, ou seja, uma instância para cada requisição. É possível mudar o tipo. Métodos públicos são utilizados para tratar os eventos Ação padrão é a index 30
o desacoplamento Convenções: Os nomes das classes terminam com a palavra Service (ex: EdicaoService) São transacionais (é possível configurar) Tipicamente: Acessam as classes de domínio Acessam outros services 37
negócio em uma API de serviços Os casos de uso da aplicação operam em múltiplos objetos de domínio, e operações complexas de negócio no modelo não devem ser misturadas com a lógica do controlador Alguns casos de uso, e processos de negócio são melhor encapsulados fora de um objeto de domínio. Nesse caso, podem ser encapsulados em uma API. The Definitive Guide to Grails 2 - Jeff Scott Brown, Graeme Rocher 38
SpringSecurity como plugin principal para controle de acesso Comandos Basicos: l //Configuracão inicial l S2-quickstart pacote ClasseUser ClasseRole l //Gerar token persistent l grails s2-create-persistent-token <classname> 49
new Date()) l Cliente.findAllByIdadeGreaterThanEquals(30) l Cliente.findAllByIdadeNotEqual(20) l Cliente.findAllByIdadeLessThan(50) l Cliente.findAllByNomeInList(["João","José","Juca"]) l Cliente.findAllByDataNascimentoIsNull() l Cliente.findAllByDataNascimentoIsNotNull()
framework Hibernate. É uma ótima solução para consultar dados do banco de dados sem a necessidade de escrever comandos HQL, e permite aninhar critérios de seleção com facilidade. A estrutura básica do createCriteria() é: def lista = Cliente.createCriteria().list{ ilike("nome","%João") order("idade") } //Listar todos os clientes cujo nome comeca com a letra A e B createCriteria() def lista = Prato.createCriteria().list{ or{ ilike("nome","A%") ilike("nome","B%") } }
Cliente.executeQuery("select cli from Cliente cli") //listar todos os clientes por ordem decrescente def lista = Cliente.executeQuery("select cli from Cliente cli order by cli.nome desc") //Listar os pratos cujo nome começa com a letra A ou a letra B String hql = "select p from Prato p "+ " where lower(nome) like lower('A%') or lower(nome) like lower('B%')" def lista = Prato.executeQuery(hql)