O documento introduz o framework Grails, discutindo seus principais conceitos como:
1) Grails é um framework MVC para desenvolvimento web baseado em Java que simplifica a configuração e desenvolvimento através do uso de convenções;
2) O modelo (M) representa as entidades do domínio e é mapeado para tabelas no banco de dados através do GORM;
3) O controle (C) contém as regras de negócio em ações e interage com o modelo e a visão;
4) A visão (V) renderiza respostas para o usu
2. Roteiro
O que é Grails?
Primeiro Projeto
O M do MVC
Persistência – GORM
Relacionamentos
@lucas_aquiles
3. O que é Grails
Problemas comuns
Quando você começa um novo projeto você tem
que configurar tudo:
Construir todos os componentes
Configurar arquivos xml
Mapear com o ORM manualmente
É dificil escrever uma view limpa
Tag libs eram sempre dolorosas
@lucas_aquiles
6. O que é Grails
Framework baseada no MVC
Segue boas praticas popularizadas pelo Rails
CoC
DRY
Construído sobre gigantes
S p r i n g : IoC, DI, Spring MVC, Spring WebFlow
H i b e r n a t e :ORM
@lucas_aquiles
7. O que é Grails
Instalação e Configuração
Download da ultima versão do grails
grails.org/Downloads
Descompacte em algum lugar
Crie o GRAILS_HOME
Adicione $GRAILS_HOME/bin no PATH
Pronto!
@lucas_aquiles
8. O que Grails
Cadê os arquivos de config?
Cadê meus DAOs?
E os mapeamentos?
Sem banco pra configurar?
Sem servlet container ou
App server pra instalar?
@lucas_aquiles
9. O que é Grails DataSource.groovy
Config.groovy
Bootstrap.groovy
URLMapping.groovy
web.xml
@lucas_aquiles
10. O M do MVC
Toda entidade persistente fica aqui
São mapeadas de maneira transparente
Model são configurados como POGOs
Cada classe de domínio corresponde a uma
tabela no banco de dados relacional
comando: grails create-domain-class P erson
@lucas_aquiles
11. O M do MVC
É uma classe Groovy normal
Constraints
Valida a entrada dos campos
Você pode criar sua própria constraints
blank, creditcard, email, url, nullable, unique
@lucas_aquiles
12. Persistência - GORM
Utiliza o Hibernate por baixo dos panos
Para cada classe de domínio é injetado os
métodos do GORM
produto.save(), P roduto.list(), P roduto.get(id)
produto.count(), produto.delete(), etc...
Buscadores dinâmicos
P roduto.findB yP reco(2.0)
@lucas_aquiles
14. Persistência - GORM
HQL – Hibernate Query Language
Produto.find(“from Produto where preco = :preco
and nome like :nome”, [preco:2.0, nome:'nome do
produto'])
Parâmetros:
max, sort, order
@lucas_aquiles
16. Persistência - GORM
Suporte a criteria API
def criteria = createCriteria();
def resultado = criteria.list(){
categoria{eq(2)}
order “nome”
}
@lucas_aquiles
17. Relacionamentos
Permite 4 tipos de relacionamentos
One-to-one, one-to-many, many-to-many, many-to-
one
OneToMany
Player hasOne Team
HasMany
Team hasMany Players
Métodos dinâmicos:
@lucas_aquiles
18. Relacionamentos
Em relacionamentos manyT oM any um dos lados
da relação deve definir o belongsT o
Mapping
I nsertable
Inserida dinamicamente quando uma instancia for salva
C ascade
Configura ações em cascada entre a associação
U pdatable
@lucas_aquiles
19. O C do MVC
Toda regra de negócio é chamada a partir daqui
A c t i o n s : são clousures que vão receber
requisições e fazer alguma coisa
H ttpServletR equest e H ttpServletR esponse
p a r a m s : váriavel,map, injetado
dinamicamente em todo controller que contêm
os parametros da requisição
@lucas_aquiles
20. O C do MVC
R e n d e r : renderiza uma resposta
Uma view, um texto, um template
Parâmetros
view
template
model
text
var
@lucas_aquiles
21. O C do MVC
R e d i r e c t : redireciona para algum lugar
Parâmetros:
action
controller
URI
params
@lucas_aquiles
22. O C do MVC
A variável scaffolding
Permite criar a estrutura CRUD dinâmica para uma
classe de domínio
def scaffolding = P roduto
*Scaffolding não é a solução final!
@lucas_aquiles
23. Service
Centraliza a regra de negócio
Compartilha a mesma regra de negócio com a
classe de domínio
É injetado automaticamente no controller pelo
Spring
C omando: grails create-service ServiceN ame
@lucas_aquiles
25. O V do MVC
Comando grails-generate-views D omainN ame
Arquivos .gsp
Baseados em taglibs
Evitam misturar codigo de programação com código
de marcação
Semelhante ao JSP
<%= produto.nome %>
@lucas_aquiles
26. O V do MVC
Loops
Each
Parâmetros
in: lista que será iterada
var: variável temporária, padrão it
If/else
Parâmetros
test: recebe a condição a ser testada
Set
@lucas_aquiles
27. Scaffolding
Comando: grails generate-all D omainN ame
Cria toda o controller e views com a estrutura de
CRUD
Ótimo para prototipação
Scaffolding dinâmico: injetado no controller, recebe
como valor a classe de domínio
@lucas_aquiles
28. TDD – Test Driven Development
Integrado com o jUnit
Toda classe de teste extende GroovyTestCase
Permite fazer testes:
Unitários
De integração
Funcionais
Semelhante aos testes em Java
@lucas_aquiles
29. TDD
UnitTest != IntegrationTest
Testes unitários verificam um objeto isolado, não há
necessidade de conexão com banco, web sercce
ou outro compomente.
Testes de integração integrar um objeto a ser
testado com componentes externos
@lucas_aquiles
30. TDD
mockDomain
Herdado de GrailsUnitTestCase
Injeta na classe de domínio que a classe deve ter
Validate(), save(), delete()
@lucas_aquiles
31. TDD
Testes em Controllers
mockP arams: funciona como os params do controller
controller: identifica um controller
R edirectA rgs: possui os parametros:
A ction, controller, model
M ockR equest: simula uma instancia para
HttpServletRequest
M ockSession: simula uma HttpSession
@lucas_aquiles