• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Introducción a groovy & grails
 

Introducción a groovy & grails

on

  • 2,732 views

Presentación del IV BetaBeers de Badajoz

Presentación del IV BetaBeers de Badajoz

Statistics

Views

Total Views
2,732
Views on SlideShare
2,727
Embed Views
5

Actions

Likes
0
Downloads
0
Comments
0

2 Embeds 5

http://www.linkedin.com 4
https://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Introducción a groovy & grails Introducción a groovy & grails Presentation Transcript

    • 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 SQLimport groovy.sql.Sqldef 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 eachRowo firsRowo 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 groovyExternos Internos @fatimacasau
    • Un kōan (公案; Japonés: kōan, Chino: gōngàn) es, en la tradición zen, un problemaque 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