SlideShare una empresa de Scribd logo
1 de 87
Introdução a Grails: 
Um framework veloz e 
poderoso 
Bruno Lorenço Lopes 
Analista de Tecnologia da Informação (SIn – UFSCar) 
14 de outubro de 2014
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 
2
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) 
3
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 
4
Arquivos XML... 
5
Código desnecessário e repetitivo... 
6
Burocracia... 
7
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 
8
Código confuso... 
9
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 
10
Groovy e Grails 
 Linguagem de programação dinâmica que roda na JVM 
 Framework fullstack (pilha completa) para desenvolvimento de aplicações 
web 
11
Arquitetura 
12
O que você ganha com Grails? 
13
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. 
14
Model-View-Controller 
15 
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
Model-View-Controller na Web 
16 
3. O modelo 
devolve os 
dados pedidos 
Modelo Visão 
Controlador 
Browser 
2. O controlador 
pede dados ao 
Modelo 
1. O usuário envia um 
pedido de url 
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
Criando uma App Grails 
17 
 Comando create-app: Cria uma nova aplicação Grails
Classes de domínio 
Controllers e Serviços fazem 
fazem 
parte do Modelo 
Scripts Grails, por 
exemplo para 
configuração 
Estrutura de um projeto Grails 
18 
parte do 
Controlador 
Views e Taglibs 
fazem parte do 
CoCdoenctsreo lcaldaosrses 
específicas do 
“DicioGnárariiolss” para 
inteArrnqauciivoonsa ldizea ção 
Configuração 
Código Java! 
Código Groovy 
Tes“tTgeeessn tuéenrsii ctdáoer” ios 
integração
Estrutura de um projeto Grails 
Tudo que está no 
classpath, como 
Nome e versão da 
aplicação, versão 
Recursos como 
CSV, javascripts e 
19 
Lista de Plugins 
utilizados 
bibliotecas 
do Grails 
imagens 
WEB-INF, META-INF 
Grails Wrapper
Grails Wrapper 
 Permite construir a aplicação sem ter que configurar o 
Grails 
20
Rodando a aplicação 
21 
 Comando run-app: Roda a aplicação em modo de 
desenvolvimento
A aplicação inicial padrão 
22
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 
23
Classe de Domínio - Criação 
24 
 Vamos criar uma classe de domínio Campeonato
Classe de Domínio - Criação 
25 
Restrições para os 
campos da classe
Classe de Domínio – Adicionando 
Restrições 
 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 
26
Status da Aplicação 
27 
 É possível verificar como anda a aplicação
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 
28
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 
29
Controller - Scaffold 
30 
 Vamos criar um controller Scaffold para a classe 
Campeonato
Controller - Scaffold 
1 linha só? O que ela 
significa? 
31
Controller - Scaffold 
O controlador está 
32 
disponível...
Controller - Scaffold 
33 
Listagem
Controller - Scaffold 
34 
Página para cadastro 
de novo campeonato
Controller - Scaffold 
35 
O Grails valida se a 
informação digitada está de 
acordo com as restrições
Controller - Scaffold 
E comunica o sucesso da 
36 
operação
Controller - Scaffold 
37
Acrescentando mais campos na classe de 
domínio 
38
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 
39 
excluída
Criação de classe de domínio com 
dependência 
Um campeonato pode 
ter várias edições 
40
Criação de classe de domínio com 
dependência 
41 
Cria um link para a 
adição de novas edições
Criação de classe de domínio com 
dependência 
42 
Deu fã... 
Por quê??? 
Aplicação ControllerAction Parâmetros
Gerando Controller e Views 
 Comando generate-all: Gera o controller com os métodos 
43 
Controller 
Views 
e as views
Gerando Controller e Views 
Tipo de transição 
padrão: Somente 
Métodos HTML 
leitura 
permitidos para cada 
44 
action
Gerando Controller e Views 
45 
 Agora a view funciona!
Entendendo o Controller 
46
Entendendo o Controller 
47 
llooccaallhhoosstt::88008800//CCaammppeeoonnaattooBBrraassiilleeiirroo//eeddiiccaaoo//sshhooww//11..jxsmonl
Entendendo o Controller 
48 
localhost:8080/CampeonatoBrasileiro/edicao.xml
Entendendo o Controller 
 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 
49
Views (Visões) 
 São arquivos GSP – Aceitam linguagem HTML e taglibs do Grails 
 Ficam dentro do diretório do respectivo controller 
50
Views (Visões) 
51 
Importa a classe 
Edição 
Define uma variável 
com nome 
entityName 
Dois modos de 
chamar uma tag 
Grails 
message.properties
Views (Visões) 
52
Views (Visões) 
53 
Acessos as variáveis 
vindas do controller
Views (Visões) 
54 
Uso de Templates
Views (Visões) 
55 
Nome dos atributos
Views (Visões) 
56 
O Grails já faz o bind 
dos atributos no 
objeto
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 
57
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 
58
Services 
 Comando create-service: Cria um serviço a partir de uma 
classe de domínio 
59
Services 
60
Services 
61
Services – Usando no Controller 
62 
Injeção de 
dependência 
Chamada do 
método
Testes 
 Utiliza o Spock, que tem como base o JUnit 
 Compatível com diversas IDEs 
 Linguagem bem semântica 
63
Testes 
64
Testes 
65
Testes 
 Comando test-app: Realiza testes na aplicação 
 É possível testar uma única classe 
 É possível determinar o tipo de teste (:unit, :integration) 
66
Testes 
67
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 
68
Banco de Dados 
69 
Configurações da 
Base de Dados 
(H2) 
Configurações o 
Hibernate
Banco de Dados 
70 
Ambientes específicos 
para desenvolvimento, 
testes, e produção
Banco de Dados 
71 
 E eu posso trocar? PODE!!! 
 Para isso, você deve: 
 Informar o driver do banco 
 Configurar a URL 
 Configurar nome de usuário e senha
Configuração do Build 
 Arquivo BuildConfig.groovy no diretório conf 
 Permite utilizar repositórios Maven 
72
Configuração do Build 
 Permite utilização de bibliotecas Java, como drivers de 
bancos de dados 
73
Configuração do Build 
 Permite utilização de plugins 
74
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) 
75
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) 
76
Tecnologias e Bibliotecas 
77
Grails: Vantagens 
 Curva de aprendizado facilitada para programadores Java 
 Poder das linguagens dinâmicas 
 Padrão MVC 
 Tecnologias consolidadas 
 Suporte de IDEs 
 Muitos plugins 
78
Grails: Vantagens 
 Templates 
 Taglibs 
 Facilidade na hora de testar 
 Alta produtividade 
79
Grails: Panorama 
80 
 Versão 3.0 - Objetivos: 
 Gradle 
 Spring Boot 
 Redução de Dependências 
 Entre outros
Grails: Panorama 
Fonte: http://zeroturnaround.com/ 81
Grails: Panorama 
Critérios como: 
- Facilidade de Uso 
- Documentação 
- Ecossistema 
- Escalabilidade 
- Velocidade de 
Desenvolvimento 
Fonte: http://zeroturnaround.com/ 82
Grails: Panorama 
Fonte: http://zeroturnaround.com/ 83
Grails: Empresas que utilizam 
84 
Fontes: https://grails.org/websites 
http://philip.yurchuk.com/software/companies-using-grails/
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) 
85
Código 
 Github 
 https://github.com/portalbll/CampeonatoBrasileiro 
86
87 
Perguntas?

Más contenido relacionado

La actualidad más candente

Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 
Golang (Go Programming Language)
Golang (Go Programming Language)Golang (Go Programming Language)
Golang (Go Programming Language)ShubhamMishra485
 
clean code book summary - uncle bob - English version
clean code book summary - uncle bob - English versionclean code book summary - uncle bob - English version
clean code book summary - uncle bob - English versionsaber tabatabaee
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
De a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de APIDe a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de APIElias Nogueira
 
Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean CodeAndré Leoni
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0César Augusto Pessôa
 
Golang 101
Golang 101Golang 101
Golang 101宇 傅
 
The Go programming language - Intro by MyLittleAdventure
The Go programming language - Intro by MyLittleAdventureThe Go programming language - Intro by MyLittleAdventure
The Go programming language - Intro by MyLittleAdventuremylittleadventure
 
Introduction to Go programming language
Introduction to Go programming languageIntroduction to Go programming language
Introduction to Go programming languageSlawomir Dorzak
 
Introduction to go language programming
Introduction to go language programmingIntroduction to go language programming
Introduction to go language programmingMahmoud Masih Tehrani
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terEmerson Macedo
 
Unit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of PurityUnit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of PurityVictor Rentea
 
Go Programming Language (Golang)
Go Programming Language (Golang)Go Programming Language (Golang)
Go Programming Language (Golang)Ishin Vin
 
Introduction to GoLang
Introduction to GoLangIntroduction to GoLang
Introduction to GoLangNVISIA
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileElias Nogueira
 

La actualidad más candente (20)

Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
Golang (Go Programming Language)
Golang (Go Programming Language)Golang (Go Programming Language)
Golang (Go Programming Language)
 
clean code book summary - uncle bob - English version
clean code book summary - uncle bob - English versionclean code book summary - uncle bob - English version
clean code book summary - uncle bob - English version
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
De a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de APIDe a máxima cobertura nos seus testes de API
De a máxima cobertura nos seus testes de API
 
Apresentação Clean Code
Apresentação Clean CodeApresentação Clean Code
Apresentação Clean Code
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
Golang 101
Golang 101Golang 101
Golang 101
 
Clean code
Clean codeClean code
Clean code
 
The Go programming language - Intro by MyLittleAdventure
The Go programming language - Intro by MyLittleAdventureThe Go programming language - Intro by MyLittleAdventure
The Go programming language - Intro by MyLittleAdventure
 
Introduction to Go programming language
Introduction to Go programming languageIntroduction to Go programming language
Introduction to Go programming language
 
Introduction to go language programming
Introduction to go language programmingIntroduction to go language programming
Introduction to go language programming
 
Clean code
Clean codeClean code
Clean code
 
Nodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis terNodejs - A performance que eu sempre quis ter
Nodejs - A performance que eu sempre quis ter
 
Unit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of PurityUnit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of Purity
 
Go Programming Language (Golang)
Go Programming Language (Golang)Go Programming Language (Golang)
Go Programming Language (Golang)
 
Introduction to GoLang
Introduction to GoLangIntroduction to GoLang
Introduction to GoLang
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
 

Destacado

Inversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringInversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringHenrique Weissmann
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Alex Guido
 
Grails parte ii - plugins & rest
Grails   parte ii - plugins & restGrails   parte ii - plugins & rest
Grails parte ii - plugins & restJosino Rodrigues
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireportfpsgyn
 
Migrating from Grails 2 to Grails 3
Migrating from Grails 2 to Grails 3Migrating from Grails 2 to Grails 3
Migrating from Grails 2 to Grails 3Michael Plöd
 

Destacado (6)

Inversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com SpringInversão de Controle, Injeção de Dependências e AOP com Spring
Inversão de Controle, Injeção de Dependências e AOP com Spring
 
Jasper reports
Jasper reportsJasper reports
Jasper reports
 
Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.Desenvolvimento Ágil com Grails.
Desenvolvimento Ágil com Grails.
 
Grails parte ii - plugins & rest
Grails   parte ii - plugins & restGrails   parte ii - plugins & rest
Grails parte ii - plugins & rest
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireport
 
Migrating from Grails 2 to Grails 3
Migrating from Grails 2 to Grails 3Migrating from Grails 2 to Grails 3
Migrating from Grails 2 to Grails 3
 

Similar a Introdução a Grails: Um framework veloz e poderoso

Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCMichael Costa
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Alexandre Tarifa
 
Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Lucas Aquiles
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Lucas Augusto Carvalho
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de CakephpCauan Cabral
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Padrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebPadrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebDenis L Presciliano
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoGuilhermeJorgeAragod
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifaguestea329c
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebDaniel Brandão
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 

Similar a Introdução a Grails: Um framework veloz e poderoso (20)

Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Grails
GrailsGrails
Grails
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
Treinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVCTreinamento Básico Sobre ASP.NET MVC
Treinamento Básico Sobre ASP.NET MVC
 
Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010Palestra MVC - Online tech day 2010
Palestra MVC - Online tech day 2010
 
Treinamento Play Framework
Treinamento Play FrameworkTreinamento Play Framework
Treinamento Play Framework
 
Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2Produtividade na web_com_groovy_e_grails_pt2
Produtividade na web_com_groovy_e_grails_pt2
 
Projeto de Software
Projeto de SoftwareProjeto de Software
Projeto de Software
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Padrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações WebPadrões de Projeto J2EE para Aplicações Web
Padrões de Projeto J2EE para Aplicações Web
 
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como CódigoCurso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
Curso de Verão - Aula 03 - Introdução ao CI-CD e Infraestrutura como Código
 
drools
droolsdrools
drools
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
ASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre TarifaASP.NET MVC - Alexandre Tarifa
ASP.NET MVC - Alexandre Tarifa
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Tutorial struts
Tutorial strutsTutorial struts
Tutorial struts
 

Último

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 

Último (9)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 

Introdução a Grails: Um framework veloz e poderoso

  • 1. Introdução a Grails: Um framework veloz e poderoso Bruno 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 2
  • 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) 3
  • 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 4
  • 6. Código desnecessário e repetitivo... 6
  • 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 8
  • 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 10
  • 11. Groovy e Grails  Linguagem de programação dinâmica que roda na JVM  Framework fullstack (pilha completa) para desenvolvimento de aplicações web 11
  • 13. O que você ganha com Grails? 13
  • 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. 14
  • 15. Model-View-Controller 15 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 16 3. O modelo devolve os dados pedidos Modelo Visão Controlador Browser 2. O controlador pede dados ao Modelo 1. O usuário envia um pedido de url 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 17  Comando create-app: Cria uma nova aplicação Grails
  • 18. Classes de domínio Controllers e Serviços fazem fazem parte do Modelo Scripts Grails, por exemplo para configuração Estrutura de um projeto Grails 18 parte do Controlador Views e Taglibs fazem parte do CoCdoenctsreo lcaldaosrses específicas do “DicioGnárariiolss” para inteArrnqauciivoonsa ldizea ção Configuração Código Java! Código Groovy Tes“tTgeeessn tuéenrsii ctdáoer” ios integração
  • 19. Estrutura de um projeto Grails Tudo que está no classpath, como Nome e versão da aplicação, versão Recursos como CSV, javascripts e 19 Lista de Plugins utilizados bibliotecas do Grails imagens WEB-INF, META-INF Grails Wrapper
  • 20. Grails Wrapper  Permite construir a aplicação sem ter que configurar o Grails 20
  • 21. Rodando a aplicação 21  Comando run-app: Roda a aplicação em modo de desenvolvimento
  • 22. A aplicação inicial padrão 22
  • 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 23
  • 24. Classe de Domínio - Criação 24  Vamos criar uma classe de domínio Campeonato
  • 25. Classe de Domínio - Criação 25 Restrições para os campos da classe
  • 26. Classe de Domínio – Adicionando Restrições  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 26
  • 27. Status da Aplicação 27  É 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 28
  • 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 29
  • 30. Controller - Scaffold 30  Vamos criar um controller Scaffold para a classe Campeonato
  • 31. Controller - Scaffold 1 linha só? O que ela significa? 31
  • 32. Controller - Scaffold O controlador está 32 disponível...
  • 33. Controller - Scaffold 33 Listagem
  • 34. Controller - Scaffold 34 Página para cadastro de novo campeonato
  • 35. Controller - Scaffold 35 O Grails valida se a informação digitada está de acordo com as restrições
  • 36. Controller - Scaffold E comunica o sucesso da 36 operação
  • 38. Acrescentando mais campos na classe de domínio 38
  • 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 39 excluída
  • 40. Criação de classe de domínio com dependência Um campeonato pode ter várias edições 40
  • 41. Criação de classe de domínio com dependência 41 Cria um link para a adição de novas edições
  • 42. Criação de classe de domínio com dependência 42 Deu fã... Por quê??? Aplicação ControllerAction Parâmetros
  • 43. Gerando Controller e Views  Comando generate-all: Gera o controller com os métodos 43 Controller Views e as views
  • 44. Gerando Controller e Views Tipo de transição padrão: Somente Métodos HTML leitura permitidos para cada 44 action
  • 45. Gerando Controller e Views 45  Agora a view funciona!
  • 47. Entendendo o Controller 47 llooccaallhhoosstt::88008800//CCaammppeeoonnaattooBBrraassiilleeiirroo//eeddiiccaaoo//sshhooww//11..jxsmonl
  • 48. Entendendo o Controller 48 localhost:8080/CampeonatoBrasileiro/edicao.xml
  • 49. Entendendo o Controller  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 49
  • 50. Views (Visões)  São arquivos GSP – Aceitam linguagem HTML e taglibs do Grails  Ficam dentro do diretório do respectivo controller 50
  • 51. Views (Visões) 51 Importa a classe Edição Define uma variável com nome entityName Dois modos de chamar uma tag Grails message.properties
  • 53. Views (Visões) 53 Acessos as variáveis vindas do controller
  • 54. Views (Visões) 54 Uso de Templates
  • 55. Views (Visões) 55 Nome dos atributos
  • 56. Views (Visões) 56 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 57
  • 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 58
  • 59. Services  Comando create-service: Cria um serviço a partir de uma classe de domínio 59
  • 62. Services – Usando no Controller 62 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 63
  • 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) 66
  • 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 68
  • 69. Banco de Dados 69 Configurações da Base de Dados (H2) Configurações o Hibernate
  • 70. Banco de Dados 70 Ambientes específicos para desenvolvimento, testes, e produção
  • 71. Banco de Dados 71  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 72
  • 73. Configuração do Build  Permite utilização de bibliotecas Java, como drivers de bancos de dados 73
  • 74. Configuração do Build  Permite utilização de plugins 74
  • 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) 75
  • 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) 76
  • 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 78
  • 79. Grails: Vantagens  Templates  Taglibs  Facilidade na hora de testar  Alta produtividade 79
  • 80. Grails: Panorama 80  Versão 3.0 - Objetivos:  Gradle  Spring Boot  Redução de Dependências  Entre outros
  • 81. Grails: Panorama Fonte: http://zeroturnaround.com/ 81
  • 82. Grails: Panorama Critérios como: - Facilidade de Uso - Documentação - Ecossistema - Escalabilidade - Velocidade de Desenvolvimento Fonte: http://zeroturnaround.com/ 82
  • 83. Grails: Panorama Fonte: http://zeroturnaround.com/ 83
  • 84. Grails: Empresas que utilizam 84 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) 85
  • 86. Código  Github  https://github.com/portalbll/CampeonatoBrasileiro 86