Upload
bruno-lopes
View
268
Download
1
Embed Size (px)
DESCRIPTION
Nesta apresentação são abordados os principais aspectos e vantagens da utilização do framework Grails no desenvolvimento de sistemas web. Um pequeno exemplo de sistema é mostrado, permitindo que o público tenha ideia de como é programar em Grails, e são ressaltadas suas diferenças em relação ao JSF.
Citation preview
Introdução a Grails:Um framework veloz
e poderosoBruno Lorenço Lopes
Analista de Tecnologia da Informação (SIn – UFSCar)
14 de outubro de 2014
2
Apresentação Pessoal
Nome: Bruno Lorenço Lopes Formação
Graduação em Engenharia de Computação na USP São Carlos (2005 - 2009)
Especialização em Desenvolvimento de Software para a Web na UFSCar (2010 - 2011)
Mestrado em Ciências da Computação e Matemática Computacional na USP São Carlos (2011 - 2014)
Experiência Profissional Estágio em desenvolvimento de software no CPqD (2009) Analista de Sistemas na Enalta (2010 - 2011) Analista de Tecnologia na UFSCar (2013 - ?) Co-fundador do site www.acerteocarro.com
3
Recordar é viver...
Desenvolvimento do sistema Open BR Track Sistema 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)
4
Recordar é viver...
Desenvolvimento do sistema Open BR Track Muito código repetido e desnecessário Muito burocrático Código confuso Dificuldade de mudanças Baixa produtividade
5
Arquivos XML...
6
Código desnecessário e repetitivo...
7
Burocracia...
8
Dificuldade de mudanças...
Alterações nas entidades geravam:
Mudanças no banco de dados
Mudança nos DAOs (Data Access Object)
Mudanças nos serviços (fachadas)
Mudanças nos Managed Beans
Mudanças nos XHTML
9
Código confuso...
10
Um Pouco de História
O desenvolvimento do Grails começou 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 2.4.3
A versão 3.0 se encontra em desenvolvimento e é prevista para 2015
Projeto é patrocinado e liderado pela Pivotal Sofware
11
Groovy e Grails
Linguagem de programação dinâmica que roda na JVM
Framework fullstack (pilha completa) para desenvolvimento de aplicações web
12
Arquitetura
13
O que você ganha com Grails?
14
Princípios do Grails
Convenção em vez de Configuração – 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.
15
Model-View-Controller
Modelo
Visão
Controlador
Responsável pela organização dos dados e pelas regras do negócio
Responsável apresentação e visualização dos dados
Responsável pela integração entre as camadas de Visão e Modelo
16
Model-View-Controller na Web
Modelo Visão
Controlador
Browser
1. O 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
17
Criando uma App Grails
Comando create-app: Cria uma nova aplicação Grails
18
Scripts Grails, por exemplo
para configuração
Estrutura de um projeto GrailsClasses de domínio e
Serviços fazem parte do Modelo
Controllers fazem parte do
ControladorViews e Taglibs fazem parte do
ControladorCodecs e classes específicas do
Grails“Dicionários”
para internacionalizaç
ãoArquivos de
ConfiguraçãoCódigo Java!Código Groovy
“genérico”Testes unitáriosTestes de integração
19
Estrutura de um projeto Grails
Lista de Plugins utilizados
Tudo que está no classpath,
como bibliotecasNome e versão da aplicação,
versão do GrailsRecursos como CSV, javascripts
e imagensWEB-INF, META-
INFGrails Wrapper
20
Permite construir a aplicação sem ter que configurar o Grails
Grails Wrapper
21
Rodando a aplicação
Comando run-app: Roda a aplicação em modo de desenvolvimento
22
A aplicação inicial padrão
23
Classes de Domínio
Representam as entidades de negócio Tem atributos 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
24
Classe de Domínio - Criação
Vamos criar uma classe de domínio Campeonato
25
Classe de Domínio - Criação
Restrições para os campos da classe
26
Vamos adicionar um campo nome, e duas restrições sobre o tamanho do nome. A primeira que ele deve ter no mínimo 5 caracteres, a segunda que ele deve ter no máximo 20 caracteres
Classe de Domínio – Adicionando Restrições
27
Status da Aplicação
É possível verificar como anda a aplicação
28
Controllers (Controladores)
Responsáveis por tratar as requisições do usuário (browser) 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
Controllers (Controladores)
Seguem algumas convenções: O nome das classes deve 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
Controller - Scaffold
Vamos criar um controller Scaffold para a classe Campeonato
31
Controller - Scaffold
1 linha só? O que ela significa?
32
Controller - Scaffold
O controlador está disponível...
33
Controller - Scaffold
Listagem
34
Controller - Scaffold
Página para cadastro de novo
campeonato
35
Controller - Scaffold
O Grails valida se a informação digitada está
de acordo com as restrições
36
Controller - Scaffold
E comunica o sucesso da operação
37
Controller - Scaffold
38
Acrescentando mais campos na classe de domínio
39
Criação de classe de domínio com dependência
Define que se o campeonato for
excluído, a edição também deve ser
excluída
40
Criação de classe de domínio com dependência
Um campeonato pode ter várias edições
41
Criação de classe de domínio com dependência
Cria um link para a adição de novas
edições
42
Criação de classe de domínio com dependência
Deu fã...Por quê???
Aplicação ControllerAction Parâmetros
43
Gerando Controller e Views
Controller
Views
Comando generate-all: Gera o controller com os métodos e as views
44
Gerando Controller e Views
Métodos HTML permitidos para
cada action
Tipo de transição padrão: Somente
leitura
45
Gerando Controller e Views
Agora a view funciona!
46
Entendendo o Controller
47
Entendendo o Controllerlocalhost:8080/CampeonatoBrasileiro/edicao/show/1.xmllocalhost:8080/CampeonatoBrasileiro/edicao/show/1.json
48
Entendendo o Controller
localhost:8080/CampeonatoBrasileiro/edicaolocalhost:8080/CampeonatoBrasileiro/edicao.xml
49
Métodos do GORM (Grails' object relational mapping) Substitui o DAO (Data Access Object)
Vários métodos para busca, atualização, remoção e persistência dos dados
Entendendo o Controller
50
Views (Visões)
São arquivos GSP – Aceitam linguagem HTML e taglibs do Grails
Ficam dentro do diretório do respectivo controller
51
Views (Visões)
Importa a classe EdiçãoDefine uma
variável com nome entityName
Dois modos de chamar uma tag
Grails
message.properties
52
Views (Visões)
53
Views (Visões) Acessos as variáveis vindas do
controller
54
Views (Visões)
Uso de Templates
55
Views (Visões)
Nome dos atributos
56
Views (Visões) O Grails já faz o bind dos atributos
no objeto
57
Services (Serviços)
Camada adicional na parte do model para facilitar 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
58
Services (Serviços)
Quando usar: Você precisa centralizar a lógica do 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
59
Services
Comando create-service: Cria um serviço a partir de uma classe de domínio
60
Services
61
Services
62
Services – Usando no Controller
Injeção de dependência
Chamada do método
63
Testes
Utiliza o Spock, que tem como base o JUnit Compatível com diversas IDEs Linguagem bem semântica
64
Testes
65
Testes
66
Testes
Comando test-app: Realiza testes na aplicação É possível testar uma única classe
É possível determinar o tipo de teste (:unit, :integration)
67
Testes
68
Banco de Dados
Já temos duas classes, controllers, view, servisse, testes....
Mas não falamos ainda de banco
Onde estão os dados???
As respostas estão no arquivo Datasource.groovy, no diretório conf
69
Banco de Dados
Configurações da Base de Dados (H2)
Configurações o Hibernate
70
Banco de Dados
Ambientes específicos para
desenvolvimento, testes, e produção
71
Banco de Dados
E eu posso trocar? PODE!!! Para isso, você deve:
Informar o driver do banco
Configurar a URL
Configurar nome de usuário e senha
72
Configuração do Build
Arquivo BuildConfig.groovy no diretório conf
Permite utilizar repositórios Maven
73
Configuração do Build
Permite utilização de bibliotecas Java, como drivers de bancos de dados
74
Configuração do Build
Permite utilização de plugins
75
Plugins
1162 plug-ins (13 de outubro de 2014) Todo tipo de plugin:
Segurança (Spring Security Core, Apache Shiro Integration for Grails)
Interface (Kickstart with Bootstrap, Grails Admin Interface, Plugin Platform UI)
Persistência de dados (MongoDB GORM, Redis Plugin)
Geração de relatórios (Jasper Plugin, Excel Export Plugin)
Gerenciamento de processos (Grails Activiti Plugin, camunda Grails Plugin)
76
Plugins
Envio de e-mail (Asynchronous Mail Plugin, Provides Mail support to a running Grails application)
Cache (Cache Plugin, Ehcache Cache Plugin)
Agendamento de Jobs (Quartz, Grails Spring Batch Plugin)
Testes (Spock Plugin, Spock Functional Plugin, Geb integration for Grails)
Buscas (Searchable, ElasticSearch Grails Plugin)
Integração com redes sociais (Facebook SDK Plugin, Twitter for Spring Security OAuth plugin)
77
Tecnologias e Bibliotecas
78
Grails: Vantagens
Curva de aprendizado facilitada para programadores Java
Poder das linguagens dinâmicas Padrão MVC Tecnologias consolidadas Suporte de IDEs Muitos plugins
79
Grails: Vantagens
Templates Taglibs Facilidade na hora de testar Alta produtividade
80
Grails: Panorama
Versão 3.0 - Objetivos: Gradle
Spring Boot
Redução de Dependências
Entre outros
82
Grails: Panorama
Fonte: http://zeroturnaround.com/
Critérios como:- Facilidade de Uso- Documentação
- Ecossistema- Escalabilidade- Velocidade de
Desenvolvimento
84
Grails: Empresas que utilizam
Fontes: https://grails.org/websites http://philip.yurchuk.com/software/companies-using-grails/
85
Conselho
Sempre que possível siga as convenções...
Caso contrário, é possível fazer algumas configurações e utilizar do jeito que você quiser (assim como os outros frameworks)
86
Código
Github https://github.com/portalbll/CampeonatoBrasileiro
87
Perguntas?