SlideShare uma empresa Scribd logo
1 de 45
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.D
   river' )
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:datePi
      cker, 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

Mais conteúdo relacionado

Mais procurados

Corporate Venture Capital best practices from interviews and research
Corporate Venture Capital best practices from interviews and researchCorporate Venture Capital best practices from interviews and research
Corporate Venture Capital best practices from interviews and researchMark S. Brooks
 
Building Startup Ecosystems + Investing in Tech Startups
Building Startup Ecosystems + Investing in Tech StartupsBuilding Startup Ecosystems + Investing in Tech Startups
Building Startup Ecosystems + Investing in Tech StartupsDave McClure
 
Teacher assistants term 4 presentation
Teacher assistants term 4 presentationTeacher assistants term 4 presentation
Teacher assistants term 4 presentationMoniDonaldson
 
Building and Delivering High Stakes Executive Presentations
Building and Delivering High Stakes Executive PresentationsBuilding and Delivering High Stakes Executive Presentations
Building and Delivering High Stakes Executive PresentationsMatt Baker
 
Proyecto de vida Emilio Gutiérrez
Proyecto de vida  Emilio GutiérrezProyecto de vida  Emilio Gutiérrez
Proyecto de vida Emilio GutiérrezEmilioGD
 
Networking and Professional Communication
Networking and Professional Communication Networking and Professional Communication
Networking and Professional Communication Page Tisdale
 
Investor readiness presentation
Investor readiness presentationInvestor readiness presentation
Investor readiness presentationMark MacLeod
 
Speed Of Trust
Speed Of TrustSpeed Of Trust
Speed Of TrustGMR Group
 

Mais procurados (11)

Deans Letter
Deans LetterDeans Letter
Deans Letter
 
Corporate Venture Capital best practices from interviews and research
Corporate Venture Capital best practices from interviews and researchCorporate Venture Capital best practices from interviews and research
Corporate Venture Capital best practices from interviews and research
 
Building Startup Ecosystems + Investing in Tech Startups
Building Startup Ecosystems + Investing in Tech StartupsBuilding Startup Ecosystems + Investing in Tech Startups
Building Startup Ecosystems + Investing in Tech Startups
 
Company Builder
Company BuilderCompany Builder
Company Builder
 
Teacher assistants term 4 presentation
Teacher assistants term 4 presentationTeacher assistants term 4 presentation
Teacher assistants term 4 presentation
 
Building and Delivering High Stakes Executive Presentations
Building and Delivering High Stakes Executive PresentationsBuilding and Delivering High Stakes Executive Presentations
Building and Delivering High Stakes Executive Presentations
 
The Netflix Culture
The Netflix CultureThe Netflix Culture
The Netflix Culture
 
Proyecto de vida Emilio Gutiérrez
Proyecto de vida  Emilio GutiérrezProyecto de vida  Emilio Gutiérrez
Proyecto de vida Emilio Gutiérrez
 
Networking and Professional Communication
Networking and Professional Communication Networking and Professional Communication
Networking and Professional Communication
 
Investor readiness presentation
Investor readiness presentationInvestor readiness presentation
Investor readiness presentation
 
Speed Of Trust
Speed Of TrustSpeed Of Trust
Speed Of Trust
 

Destaque

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
 
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Fátima Casaú Pérez
 
Grails: Framework para el desarrollo de aplicaciones Web No 3
Grails: Framework para el desarrollo de aplicaciones Web No 3Grails: Framework para el desarrollo de aplicaciones Web No 3
Grails: Framework para el desarrollo de aplicaciones Web No 3Esteban Saavedra
 
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)Jose Juan R. Zuñiga
 
t3chfest 2016 - Implementando microservicios, como y por que
t3chfest 2016 - Implementando microservicios, como y por quet3chfest 2016 - Implementando microservicios, como y por que
t3chfest 2016 - Implementando microservicios, como y por queFátima Casaú Pérez
 
Memoria ayuda a domicilio 2011
Memoria ayuda a domicilio 2011Memoria ayuda a domicilio 2011
Memoria ayuda a domicilio 2011Muskizko Udala
 
1108 Sapag Ev Proy Foll C
1108 Sapag Ev Proy Foll C1108 Sapag Ev Proy Foll C
1108 Sapag Ev Proy Foll Crolivares1983
 
Karrieredagavis 2009
Karrieredagavis   2009Karrieredagavis   2009
Karrieredagavis 2009stofa86
 
Marketing de servicios
Marketing de serviciosMarketing de servicios
Marketing de serviciosHector Maida
 
Seguimiento de dependientes del alcohol yo de la cocaína después de su salida...
Seguimiento de dependientes del alcohol yo de la cocaína después de su salida...Seguimiento de dependientes del alcohol yo de la cocaína después de su salida...
Seguimiento de dependientes del alcohol yo de la cocaína después de su salida...David Saavedra Pino
 
GDSF India
GDSF IndiaGDSF India
GDSF IndiaSyd Mj
 
Jarrin arte-barroco
Jarrin arte-barrocoJarrin arte-barroco
Jarrin arte-barrocoviviale19
 

Destaque (20)

Groovy
GroovyGroovy
Groovy
 
2013 greach
2013 greach2013 greach
2013 greach
 
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
 
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
Taller Testing en Grails con Grails y Geb (WebDriver) - Springio I/O 2011
 
Grails: Framework para el desarrollo de aplicaciones Web No 3
Grails: Framework para el desarrollo de aplicaciones Web No 3Grails: Framework para el desarrollo de aplicaciones Web No 3
Grails: Framework para el desarrollo de aplicaciones Web No 3
 
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
Desarrollo en 4G(Groovy, Grails, Git, GoogleAppEngine)
 
t3chfest 2016 - Implementando microservicios, como y por que
t3chfest 2016 - Implementando microservicios, como y por quet3chfest 2016 - Implementando microservicios, como y por que
t3chfest 2016 - Implementando microservicios, como y por que
 
Spring boot + spock
Spring boot + spockSpring boot + spock
Spring boot + spock
 
Branch per user story
Branch per user storyBranch per user story
Branch per user story
 
Testing con spock
Testing con spockTesting con spock
Testing con spock
 
Introducción a Groovy
Introducción a GroovyIntroducción a Groovy
Introducción a Groovy
 
Memoria ayuda a domicilio 2011
Memoria ayuda a domicilio 2011Memoria ayuda a domicilio 2011
Memoria ayuda a domicilio 2011
 
1108 Sapag Ev Proy Foll C
1108 Sapag Ev Proy Foll C1108 Sapag Ev Proy Foll C
1108 Sapag Ev Proy Foll C
 
Karrieredagavis 2009
Karrieredagavis   2009Karrieredagavis   2009
Karrieredagavis 2009
 
Marketing de servicios
Marketing de serviciosMarketing de servicios
Marketing de servicios
 
Seguimiento de dependientes del alcohol yo de la cocaína después de su salida...
Seguimiento de dependientes del alcohol yo de la cocaína después de su salida...Seguimiento de dependientes del alcohol yo de la cocaína después de su salida...
Seguimiento de dependientes del alcohol yo de la cocaína después de su salida...
 
Spanish blade book600 1
Spanish blade book600 1Spanish blade book600 1
Spanish blade book600 1
 
GDSF India
GDSF IndiaGDSF India
GDSF India
 
Manuel María: animais
Manuel María: animaisManuel María: animais
Manuel María: animais
 
Jarrin arte-barroco
Jarrin arte-barrocoJarrin arte-barroco
Jarrin arte-barroco
 

Semelhante a Introducción a groovy & grails

Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grailsbetabeers
 
¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?Jorge Franco Leza
 
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
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasCarlos Camacho
 
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
 
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
 
Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaAndres Almiray
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaSoftware Guru
 
Java 10 hack day
Java 10 hack dayJava 10 hack day
Java 10 hack dayHillmerC
 
Marchando sobre Rieles
Marchando sobre RielesMarchando sobre Rieles
Marchando sobre Rielescdechauri
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket
 
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
 
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
 

Semelhante a Introducción a groovy & grails (20)

Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?¿Grails + DDD + Eventsourcing + CQRS?
¿Grails + DDD + Eventsourcing + CQRS?
 
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
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
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
 
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
 
Realizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y EficaciaRealizando Pruebas en la JVM con Velocidad y Eficacia
Realizando Pruebas en la JVM con Velocidad y Eficacia
 
Realizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficaciaRealizando pruebas en la JVM con velocidad y eficacia
Realizando pruebas en la JVM con velocidad y eficacia
 
Java 10 hack day
Java 10 hack dayJava 10 hack day
Java 10 hack day
 
Marchando sobre Rieles
Marchando sobre RielesMarchando sobre Rieles
Marchando sobre Rieles
 
Jobsket Spring 2GX Madrid
Jobsket Spring 2GX MadridJobsket Spring 2GX Madrid
Jobsket Spring 2GX Madrid
 
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
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Dbdeployer
DbdeployerDbdeployer
Dbdeployer
 
Grails en Expo FISI 2011
Grails en Expo FISI 2011Grails en Expo FISI 2011
Grails en Expo FISI 2011
 
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
 
Jdbc
JdbcJdbc
Jdbc
 

Último

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 

Último (11)

PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 

Introducción a 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.D river' ) 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:datePi cker, 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