Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Groovy & Grails

Betabeers
August 05, 2012
1.8k

Groovy & Grails

Betabeers

August 05, 2012
Tweet

Transcript

  1.  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
  2.  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
  3.  Menos líneas dé código  Menos errores  Expresividad

     Flexibilidad  Aumento de la productividad @fatimacasau
  4.  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
  5. Dynamic Typing  Tipado dinámico de datos  Tiempo de

    ejecución  Ejemplo1: Variables  Ejemplo2: Métodos @fatimacasau
  6. 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
  7. 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
  8.  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
  9.  Otros operadores ◦ Spread *  items*.id ◦ Elvis

    ?:  def b = a ?: '' ◦ Safe navigation ?.  object?.property @fatimacasau
  10. 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
  11.  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
  12. 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
  13. 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
  14. 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
  15.  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
  16.  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
  17.  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
  18.  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
  19. 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
  20.  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
  21.  grails.util.Environment  Custom environments  Detección de entornos: environments

    { production{ … } … } Import grails.util.Environment switch (Environment.current) { case Environment.DEVELOPMENT: configureForDevelopment() break … } @fatimacasau
  22.  Modelo ◦ domains – GORM  Vista ◦ views

    ◦ Templates ◦ Includes ◦ Tags  Controlador ◦ controllers ◦ Interacción con servicios ◦ Filtros @fatimacasau
  23.  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
  24.  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
  25.  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
  26.  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
  27.  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
  28.  Inyección automática en: ◦ Otros servicios ◦ Controllers ◦

    Domains class MyController { def myService def anyAction(){ //… myService.anyMethod(…) //… } } class MyService { def anyMethod(){ //… } } @fatimacasau
  29.  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
  30.  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
  31.  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
  32.  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