SlideShare uma empresa Scribd logo
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?

Mais conteúdo relacionado

Mais procurados

TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
Dmitry Sheiko
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
intelliyole
 
Solid principles
Solid principlesSolid principles
Solid principles
Declan Whelan
 
AEM Sightly Deep Dive
AEM Sightly Deep DiveAEM Sightly Deep Dive
AEM Sightly Deep Dive
Gabriel Walt
 
Java: Composicao e Array List
Java: Composicao e Array ListJava: Composicao e Array List
Java: Composicao e Array List
Arthur Emanuel
 
Inheritance in C++
Inheritance in C++Inheritance in C++
Inheritance in C++
Laxman Puri
 
Mongoose getting started-Mongo Db with Node js
Mongoose getting started-Mongo Db with Node jsMongoose getting started-Mongo Db with Node js
Mongoose getting started-Mongo Db with Node js
Pallavi Srivastava
 
Why TypeScript?
Why TypeScript?Why TypeScript?
Why TypeScript?
FITC
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
Arturo Herrero
 
Inner classes in java
Inner classes in javaInner classes in java
Inner classes in java
PhD Research Scholar
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, Interface
Arthur Emanuel
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
Shaul Rosenzwieg
 
Grails Simple Login
Grails Simple LoginGrails Simple Login
Grails Simple Loginmoniguna
 
Clean code: SOLID
Clean code: SOLIDClean code: SOLID
Clean code: SOLID
Indeema Software Inc.
 
Scala fundamentals
Scala fundamentalsScala fundamentals
Scala fundamentals
Alfonso Ruzafa
 
Clean code
Clean codeClean code
Clean code
Sergey Nemchinsky
 
Python programming : Abstract classes interfaces
Python programming : Abstract classes interfacesPython programming : Abstract classes interfaces
Python programming : Abstract classes interfaces
Emertxe Information Technologies Pvt Ltd
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN Golang
Bo-Yi Wu
 
Solid principles
Solid principlesSolid principles
Solid principles
Toan Nguyen
 

Mais procurados (20)

TypeScript Introduction
TypeScript IntroductionTypeScript Introduction
TypeScript Introduction
 
Idiomatic Kotlin
Idiomatic KotlinIdiomatic Kotlin
Idiomatic Kotlin
 
Solid principles
Solid principlesSolid principles
Solid principles
 
AEM Sightly Deep Dive
AEM Sightly Deep DiveAEM Sightly Deep Dive
AEM Sightly Deep Dive
 
Java: Composicao e Array List
Java: Composicao e Array ListJava: Composicao e Array List
Java: Composicao e Array List
 
Inheritance in C++
Inheritance in C++Inheritance in C++
Inheritance in C++
 
Mongoose getting started-Mongo Db with Node js
Mongoose getting started-Mongo Db with Node jsMongoose getting started-Mongo Db with Node js
Mongoose getting started-Mongo Db with Node js
 
Why TypeScript?
Why TypeScript?Why TypeScript?
Why TypeScript?
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
 
inheritance
inheritanceinheritance
inheritance
 
Inner classes in java
Inner classes in javaInner classes in java
Inner classes in java
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, Interface
 
Introduction to kotlin
Introduction to kotlinIntroduction to kotlin
Introduction to kotlin
 
Grails Simple Login
Grails Simple LoginGrails Simple Login
Grails Simple Login
 
Clean code: SOLID
Clean code: SOLIDClean code: SOLID
Clean code: SOLID
 
Scala fundamentals
Scala fundamentalsScala fundamentals
Scala fundamentals
 
Clean code
Clean codeClean code
Clean code
 
Python programming : Abstract classes interfaces
Python programming : Abstract classes interfacesPython programming : Abstract classes interfaces
Python programming : Abstract classes interfaces
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN Golang
 
Solid principles
Solid principlesSolid principles
Solid principles
 

Destaque

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
Henrique 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 ireport
fpsgyn
 
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
Michael Plöd
 

Destaque (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
 

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

Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
Eric Gallardo
 
Grails
GrailsGrails
Grails
Alex Guido
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
Keuller Magalhães
 
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
Michael 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
 
Treinamento Play Framework
Treinamento Play FrameworkTreinamento Play Framework
Treinamento Play Framework
Keuller Magalhães
 
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
Lucas Aquiles
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
Lucas Augusto Carvalho
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
Cauan 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 Angular
Elmano 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 Web
Denis 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ódigo
GuilhermeJorgeAragod
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
Rodrigo Cândido da Silva
 
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 Web
Daniel 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 Carlos
Rodolfo Fadino Junior
 

Semelhante 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
 

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