Groovy & Grails

45
Desarrollo ágil de aplicaciones web

Transcript of Groovy & Grails

Page 1: Groovy & Grails

Desarrollo ágil de aplicaciones web

Page 2: Groovy & Grails

Fátima Casaú Pérez

5 años como Instructor y Desarrollador de Software

Especializado en: ◦ Plataforma Java ◦ Groovy & Grails ◦ Metodologías Ágiles

Contacto: ◦ [email protected] ◦ @fatimacasau ◦ fatimacasau

@fatimacasau

Page 3: Groovy & Grails

@fatimacasau

Page 4: Groovy & Grails

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

Page 5: Groovy & Grails

Menos líneas dé código

Menos errores

Expresividad

Flexibilidad

Aumento de la productividad

@fatimacasau

Page 6: Groovy & Grails

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

Page 7: Groovy & Grails

@fatimacasau

Page 8: Groovy & Grails

Dynamic Typing

Tipado dinámico de datos Tiempo de ejecución

Ejemplo1: Variables Ejemplo2: Métodos

@fatimacasau

Page 9: Groovy & Grails

Manejo de colecciones

Soporte nativo para: ◦ Listas ◦ Rangos ◦ Mapas

@fatimacasau

Page 10: Groovy & Grails

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

Page 11: Groovy & Grails

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

Page 12: Groovy & Grails

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

Page 13: Groovy & Grails

Otros operadores ◦ Spread * items*.id

◦ Elvis ?: def b = a ?: ''

◦ Safe navigation ?. object?.property

@fatimacasau

Page 14: Groovy & Grails

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

Page 15: Groovy & Grails

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

Page 16: Groovy & Grails

Groovy SQL import groovy.sql.Sql def sql = Sql.newInstance( 'jdbc:jtds:sqlserver://serverName/dbName-

CLASS;domain=domainName', 'username', 'password', 'net.sourceforge.jtds.jdbc.Driver' )

sql.eachRow( 'select * from tableName' ) { println "$it.id -- ${it.firstName} --" }

o eachRow o firsRow o executeQuery inserts, updates, deletes …

@fatimacasau

Page 17: Groovy & Grails

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

Page 18: Groovy & Grails

Externos Internos

CSS Styles

Datasources por entornos en groovy

@fatimacasau

Page 19: Groovy & Grails

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

Page 20: Groovy & Grails

@fatimacasau

Page 21: Groovy & Grails

@fatimacasau

Page 22: Groovy & Grails

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

Page 23: Groovy & Grails

Tomcat y H2 incluidos para desarrollo rápido

@fatimacasau

Page 24: Groovy & Grails

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

Page 25: Groovy & Grails

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

Page 26: Groovy & Grails

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

Page 27: Groovy & Grails

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

Page 28: Groovy & Grails

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

Page 29: Groovy & Grails

grails.util.Environment

Custom environments

Detección de entornos:

environments { production{ … } … }

Import grails.util.Environment switch (Environment.current) { case Environment.DEVELOPMENT: configureForDevelopment() break … }

@fatimacasau

Page 30: Groovy & Grails

@fatimacasau

Page 31: Groovy & Grails

Modelo ◦ domains – GORM

Vista ◦ views ◦ Templates ◦ Includes ◦ Tags

Controlador ◦ controllers ◦ Interacción con servicios ◦ Filtros

@fatimacasau

Page 32: Groovy & Grails

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

Page 33: Groovy & Grails

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

Page 34: Groovy & Grails

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

Page 35: Groovy & Grails

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

Page 36: Groovy & Grails

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

Page 37: Groovy & Grails

Inyección automática en: ◦ Otros servicios ◦ Controllers ◦ Domains

class MyController { def myService def anyAction(){ //… myService.anyMethod(…) //… } } class MyService { def anyMethod(){ //… } }

@fatimacasau

Page 38: Groovy & Grails

URL’s bonitas

Configuración ◦ grails-app/conf/UrlMappings.groovy

class UrlMappings { static mappings = { } }

@fatimacasau

Page 39: Groovy & Grails

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

Page 40: Groovy & Grails

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

Page 42: Groovy & Grails

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

Page 43: Groovy & Grails

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

Page 45: Groovy & Grails

@fatimacasau