El documento presenta a Fátima Casaú Pérez, una experta en desarrollo ágil de aplicaciones web con 5 años de experiencia como instructora y desarrolladora de software. Ella se especializa en plataforma Java, Groovy & Grails y metodologías ágiles. Proporciona sus datos de contacto.
4. Lenguaje dinámico
Máquina Virtual de Java (JVM)
Acceso al API de Java
GDK extensión de JDK
Sobrecarga de operadores, tipado dinámico,
closures…
Java <> Groovy
@fatimacasau
5. Menos líneas dé código
Menos errores
Expresividad
Flexibilidad
Aumento de la productividad
@fatimacasau
6. Sintaxis muy parecida a Java
◦ Curva de aprendizaje plana
Mismo modelo de programación - OO
Acceso al API de Java - JDK
Librerías propias - GDK
Dinámico, expresivo, …
Closures, sobrecarga de operadores, manejo de cadenas, …
Coding by Convention
@fatimacasau
10. Strings & GStrings
Cadenas en múltiples líneas con o sin saltos
◦ Triples """
Uso de /, ' , " ó """
Sustitución de variables
◦ Uso de dobles " y ${}
ejemplos
@fatimacasau
11. Closures
Bloque de código
◦ Se define, se asigna a una variable, se ejecuta después
Puede asignarse a variables
Variables implícitas
◦ it para closures con un solo argumento
Free variables
◦ Referencia a variables de fuera de la closure
ejemplos
@fatimacasau
12. Facilitan el manejo de algunos tipos de datos:
◦ Números
◦ Colecciones
◦ Cadenas
◦ Mapas
◦ …
Operadores de Groovy Métodos de Java
◦ Lista de operadores y métodos
Implementar los métodos anteriores en nuestros
objetos (Groovy/Java) permite el uso de los
operadores
@fatimacasau
13. Otros operadores
◦ Spread *
items*.id
◦ Elvis ?:
def b = a ?: ''
◦ Safe navigation ?.
object?.property
@fatimacasau
14. Expresiones Regulares
Groovy soporta expresiones regulares
A través de la expresión ~
=~ devuelve un Matcher()
==~ devuelve true/false si el String coincide con el
patrón
ejemplos
@fatimacasau
15. Loops
◦ while y for se pueden sustituir por
.each & .eachWithIndex
if/else
◦ Operador ternario
def x = y>0 ? 1 : -1
def x = y ?: 0
swith/case
◦ Cualquier tipo de datos en el “switch” y diferentes tipos de
datos en los “case”
@fatimacasau
17. Domain Specific Languages
Lenguaje para modelar una parte del dominio
Resuelve problemas de
◦ Definición
◦ Modelado
◦ Representación
Llamados mini-lenguajes
Antepasado XML’s en JAVA
◦ struts-config.xml
◦ spring-config.xml
◦ …
@fatimacasau
18. CSS Styles Datasources por entornos en groovy
Externos Internos
@fatimacasau
19. Un kōan (公案; Japonés: kōan, Chino: gōng'àn) es, en la tradición zen, un problema que el
maestro plantea al novicio para comprobar sus progresos.
http://es.wikipedia.org/wiki/Kōan
La mejor forma de aprender y comprender el lenguaje
Utilizan test unitarios
Enseñan el lenguaje Groovy y su API
Procedimiento:
◦ Ejecutar los Koans que fallan intencionadamente
◦ Sustituir __ para hacerlos funcionar
koans
@fatimacasau
22. Plataforma para el desarrollo de aplicaciones web JavaEE
Construido sobre un conjunto de frameworks consolidados
Apoyado por una extensa librería de plugins
Soluciona todas las necesidades en el desarrollo de aplicaciones web
Facilita el desarrollo de dichas aplicaciones
Utiliza GROOVY como lenguage
Software Libre - Bajo la licencia Apache 2.0 Software License
@fatimacasau
23. Tomcat y H2 incluidos para desarrollo rápido
@fatimacasau
24. Patrón MVC (Modelo, Vista, Controlador)
CoC (Convention over Configuration)
◦ Nombres y localización de ficheros indican lo que son
◦ Paradigma Coding by Convention de GROOVY
DRY (Don’t Repeat Yourself)
◦ Reutilización de código
Inyección de dependencias
@fatimacasau
25. 5 veces menos líneas de código
◦ Menos código + menos errores = productividad
Fly reloading
◦ Recarga en caliente
Capa de abstracción
◦ Facilita el uso de los frameworks sobre los que está construido
Línea de comandos
◦ run-app, war, install-plugin…
Eliminación de XML’s gracias a CoC
Extensa librería de plugins
@fatimacasau
26. JDK 1.6 y JAVA_HOME
Download GRAILS (v. 2.1)
◦ Trabajar por línea de comandos definir GRAILS_HOME
◦ Trabajar con Springsource Tool Suite
Download Springsource Tool Suite
◦ Extensiones: Grails support & Groovy eclipse plugin
Crear una aplicación
◦ command line:
grails> create-app myApp
◦ o, en STS New Grails project
@fatimacasau
27. grails [environment]* [command name]
Environments:
dev, test, prod
o si es un entorno custom
-Dgrails.env=myEnv
Comandos más usados:
◦ run-app
◦ war
◦ clean
◦ install-plugin
◦ test-app
◦ create-domain-class
◦ create-controller
◦ ceate-service
◦ generate-all
@fatimacasau
28. Configuración básica:
◦ grails-app/conf/Config.groovy
Ejemplo:
my.property.text = “hola”
Acceso:
grailsApplication.config.my.property.text
Dependencias de librerías y plugins
◦ grails-app/conf/BuildConfig.groovy
Base de datos
◦ grails-app/conf/Datasource.groovy
Acciones al principio y al final
◦ grails-app/conf/Bootstrap.groovy
Recursos: layout, javascript, css…
◦ Plugin Resources integrado
◦ MyAppResources.groovy
◦ Tag r:require en gsp’s
@fatimacasau
31. Modelo
◦ domains – GORM
Vista
◦ views
◦ Templates
◦ Includes
◦ Tags
Controlador
◦ controllers
◦ Interacción con servicios
◦ Filtros
@fatimacasau
32. GORM – Grails Object Relational Mapping
◦ Hibernate 3
Clases de dominio – POGO’S
◦ Plain Old Groovy Object
◦ getters y setters implícitos
Sin configuración
◦ Mapeos automáticos
Otros métodos implícitos
◦ save(), delete(), list(), count()…
Constraints para validación
@fatimacasau
33. Relaciones
◦ One To One
◦ One To Many
◦ Many To Many
Finders dinámicos
◦ findAllBy(), findBy(), findWhere()…
Para búsquedas más complejas
◦ HQL
◦ criterias
◦ detachedCriterias
◦ executeQueries
Ordenación y paginación
◦ sort, order, max, offset …
@fatimacasau
34. Actions
◦ Closures
◦ Métodos que reciben parámetros que vienen del formulario
◦ Redirect, chain, …
Otros actions en el mismo controlador o de otros
◦ Renders
views
templates
json
…
Interacción con la capa de servicios
Objeto flash para enviar messages
Filtros que interceptan controllers, actions, views para realizar
comprobaciones, acciones, restricciones…
@fatimacasau
35. GSP’s
◦ Groovy Server Pages
templates, includes
◦ Reutilización de código
Extensa librería de Tags
◦ Sin configuración
◦ g:each, g:if, g:form, g:formatDate, g:link, g:datePicker,
g:set …
@fatimacasau
36. Ejemplo
class SimpleTagLib {
def emoticon = { attrs, body ->
out << body() << (attrs.happy == 'true' ? " :-)" : " :-(")
}
}
◦ Uso
<g:emoticon happy="true">Hi John</g:emoticon>
Tag g:dateFormat
def dateFormat = { attrs, body ->
out << new java.text.SimpleDateFormat(attrs.format).format(attrs.date)
}
◦ Uso
<g:dateFormat format="dd-MM-yyyy" date="${new Date()}" />
@fatimacasau
39. DSL’s para mapear URL’s a:
◦ controllers y actions
"/product"(controller: "product", action: "list")
◦ views
"/"(view: "/index") // map the root URL
◦ Con variables
"/product/$id"(controller: "product")
◦ Response Codes
"403"(controller: "errors", action: "forbidden")
◦ RESTful API para métodos HTTP
"/product/$id"(controller:"product") {
action = [GET:"show", PUT:"update", DELETE:"delete", POST:"save"]
}
@fatimacasau
40. Command line
◦ Para ejecutar
Puerto por defecto 8080:
grails run-app
Especificar un puerto:
grails -Dserver.port=8090 run-app
◦ Generar un war:
Entorno de producción por defecto:
grails war
Especificar un entorno:
grails -Dgrails.env=myEnv
@fatimacasau
42. jQuery
Ajax
Creación de Plugins
Security
◦ SpringSecurity Plugin
Internacionalización
◦ I18n
Testing
◦ Mocks
Scripts
◦ Gant
Injección de dependencias con Spring
◦ Spring DSL’s
◦ grails-app/conf/spring/resources.groovy
Grails e Hibernate
◦ grails-app/conf/hibernate/hibernate.cfg.xml
Scaffolding – No recomendado
…
@fatimacasau
43. Documentación de grails
◦ http://grails.org/doc/latest/guide/
Listas de correo
◦ http://grails.org/Mailing+lists
Nabble forums
◦ http://grails.1312388.n4.nabble.com/Grails-user-f1312389.html
Grails Blog
◦ http://grails.org/blog
Issue Tracker
◦ http://jira.grails.org/browse/GRAILS
Grupo de Google – Grails en Castellano
◦ http://groups.google.es/group/grailsencastellano
Escuela de groovy
Meetup Madrid GUG
◦ http://www.meetup.com/madrid-gug/
@fatimacasau