• Save
Introducción a groovy & grails
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Introducción a groovy & grails

  • 3,086 views
Uploaded on

Presentación del IV BetaBeers de Badajoz

Presentación del IV BetaBeers de Badajoz

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
3,086
On Slideshare
3,081
From Embeds
5
Number of Embeds
2

Actions

Shares
Downloads
0
Comments
0
Likes
0

Embeds 5

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

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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
  • 3. @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
  • 7. @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 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
  • 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 groovyExternos Internos @fatimacasau
  • 19. 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
  • 20. @fatimacasau
  • 21. @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
  • 30. @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
  • 41. @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
  • 44. @fatimacasau
  • 45. @fatimacasau