Your SlideShare is downloading. ×
0
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Introducción a groovy & grails
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Introducción a groovy & grails

2,943

Published on

Presentación del IV BetaBeers de Badajoz

Presentación del IV BetaBeers de Badajoz

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,943
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

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

×