SlideShare una empresa de Scribd logo
1 de 45
Descargar para leer sin conexión
Desarrollo ágil de aplicaciones web
   Fátima Casaú Pérez

   5 años como Instructor y Desarrollador de Software


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

   Contacto:
    ◦ fatima.casau@salenda.es
    ◦ @fatimacasau
    ◦ fatimacasau


                                           @fatimacasau
@fatimacasau
   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
   Menos líneas dé código

   Menos errores

   Expresividad

   Flexibilidad

   Aumento de la productividad

                                  @fatimacasau
   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
@fatimacasau
Dynamic Typing

   Tipado dinámico de datos
   Tiempo de ejecución

   Ejemplo1: Variables
   Ejemplo2: Métodos




                                @fatimacasau
Manejo de colecciones

   Soporte nativo para:

    ◦ Listas
    ◦ Rangos
    ◦ Mapas




                                 @fatimacasau
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
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
   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
   Otros operadores

    ◦ Spread *
       items*.id


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


    ◦ Safe navigation ?.
       object?.property



                           @fatimacasau
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
   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
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
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
   CSS Styles      Datasources por entornos en groovy




Externos         Internos

                            @fatimacasau
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
@fatimacasau
@fatimacasau
   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
   Tomcat y H2 incluidos para desarrollo rápido


                                     @fatimacasau
   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
   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
   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
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
   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
   grails.util.Environment

   Custom environments

   Detección de entornos:


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




                                       @fatimacasau
@fatimacasau
   Modelo
    ◦ domains – GORM

   Vista
    ◦   views
    ◦   Templates
    ◦   Includes
    ◦   Tags

   Controlador
    ◦ controllers
    ◦ Interacción con servicios
    ◦ Filtros



                                  @fatimacasau
   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
   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
   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
   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
   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
   Inyección automática en:
    ◦ Otros servicios
    ◦ Controllers
    ◦ Domains

                    class MyController {
                       def myService

                        def   anyAction(){
                              //…
                              myService.anyMethod(…)
                              //…
                        }
                    }

                    class MyService {
                       def anyMethod(){
                            //…
                       }
                    }




                                                       @fatimacasau
   URL’s bonitas

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

     class UrlMappings {
       static mappings = {

         }
     }




                                      @fatimacasau
   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
   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
@fatimacasau
   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
   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
@fatimacasau
@fatimacasau

Más contenido relacionado

La actualidad más candente

Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilónbetabeers
 
Mongodb administración
Mongodb administraciónMongodb administración
Mongodb administraciónJuan Ladetto
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaDavid J. Brenes
 

La actualidad más candente (7)

Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
Mongodb administración
Mongodb administraciónMongodb administración
Mongodb administración
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Jvmmx jigsaw
Jvmmx jigsawJvmmx jigsaw
Jvmmx jigsaw
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de Persistencia
 
Dar lab1819
Dar lab1819Dar lab1819
Dar lab1819
 
Jdbc
JdbcJdbc
Jdbc
 

Similar a Groovy & Grails

Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Fernando Petrola
 
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones webGroovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones webParadigma Digital
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsFátima Casaú Pérez
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesDani Latorre
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Marchando sobre Rieles
Marchando sobre RielesMarchando sobre Rieles
Marchando sobre Rielescdechauri
 
Java 10 hack day
Java 10 hack dayJava 10 hack day
Java 10 hack dayHillmerC
 
Java 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and moreJava 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and moreHillmerC
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011jose diaz
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket
 
Información básica Java
Información básica JavaInformación básica Java
Información básica JavaFordBull2er
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónLoja Valle de Tecnología
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014Carlos Camacho
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
 

Similar a Groovy & Grails (20)

Introducción a groovy & grails
Introducción a groovy & grailsIntroducción a groovy & grails
Introducción a groovy & grails
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones webGroovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
Groovy&Grails: Cambia la forma de desarrollar tus aplicaciones web
 
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grailsCambia la forma de desarrollar tus aplicaciones web con groovy y grails
Cambia la forma de desarrollar tus aplicaciones web con groovy y grails
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Un poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernesUn poco más allá con grails. PrimerViernes
Un poco más allá con grails. PrimerViernes
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Marchando sobre Rieles
Marchando sobre RielesMarchando sobre Rieles
Marchando sobre Rieles
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
Java 10 hack day
Java 10 hack dayJava 10 hack day
Java 10 hack day
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Java 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and moreJava 9, 10, 11 ,12, 13 and more
Java 9, 10, 11 ,12, 13 and more
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Información básica Java
Información básica JavaInformación básica Java
Información básica Java
 
Construcción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-DistribuciónConstrucción de Aplicaciones de Avanzada con Geo-Distribución
Construcción de Aplicaciones de Avanzada con Geo-Distribución
 
Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 

Más de betabeers

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformabetabeers
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)betabeers
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lagebetabeers
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavillabetabeers
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbaobetabeers
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu appbetabeers
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)betabeers
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)betabeers
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)betabeers
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)betabeers
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Usobetabeers
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startupbetabeers
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.betabeers
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización webbetabeers
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrumbetabeers
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottambetabeers
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTbetabeers
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015betabeers
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015betabeers
 
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015betabeers
 

Más de betabeers (20)

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataforma
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lage
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Uso
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startup
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización web
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrum
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottam
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoT
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
 
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
Presentación Kbi Digital - VIII Betabeers Bilbao 27/02/2015
 

Groovy & Grails

  • 1. Desarrollo ágil de aplicaciones web
  • 2. Fátima Casaú Pérez  5 años como Instructor y Desarrollador de Software  Especializado en: ◦ Plataforma Java ◦ Groovy & Grails ◦ Metodologías Ágiles  Contacto: ◦ fatima.casau@salenda.es ◦ @fatimacasau ◦ fatimacasau @fatimacasau
  • 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
  • 8. Dynamic Typing  Tipado dinámico de datos  Tiempo de ejecución  Ejemplo1: Variables  Ejemplo2: Métodos @fatimacasau
  • 9. Manejo de colecciones  Soporte nativo para: ◦ Listas ◦ Rangos ◦ Mapas @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
  • 16. 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
  • 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
  • 29. grails.util.Environment  Custom environments  Detección de entornos: environments { Import grails.util.Environment production{ … switch (Environment.current) { } case Environment.DEVELOPMENT: … configureForDevelopment() } break … } @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
  • 37. Inyección automática en: ◦ Otros servicios ◦ Controllers ◦ Domains class MyController { def myService def anyAction(){ //… myService.anyMethod(…) //… } } class MyService { def anyMethod(){ //… } } @fatimacasau
  • 38. URL’s bonitas  Configuración ◦ grails-app/conf/UrlMappings.groovy class UrlMappings { static mappings = { } } @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