Desarrollo ágil de aplicaciones web
   Fátima Casaú Pérez   5 años como Instructor y Desarrollador de Software   Especializado en:    ◦ Plataforma Java    ...
@fatimacasau
   Lenguaje dinámico   Máquina Virtual de Java (JVM)   Acceso al API de Java   GDK  extensión de JDK   Sobrecarga de...
   Menos líneas dé código   Menos errores   Expresividad   Flexibilidad   Aumento de la productividad                ...
   Sintaxis muy parecida a Java    ◦ Curva de aprendizaje plana   Mismo modelo de programación - OO   Acceso al API de ...
@fatimacasau
Dynamic Typing   Tipado dinámico de datos   Tiempo de ejecución   Ejemplo1: Variables   Ejemplo2: Métodos             ...
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 /,  , " ó """   Sustituc...
Closures   Bloque de código    ◦ Se define, se asigna a una variable, se ejecuta después   Puede asignarse a variables ...
   Facilitan el manejo de algunos tipos de    datos:    ◦   Números    ◦   Colecciones    ◦   Cadenas    ◦   Mapas    ◦  ...
   Otros operadores    ◦ Spread *      items*.id    ◦ Elvis ?:      def b = a ?:     ◦ Safe navigation ?.      object?...
Expresiones Regulares   Groovy soporta expresiones regulares   A través de la expresión ~   =~ devuelve un Matcher()  ...
   Loops    ◦ while y for se pueden sustituir por     .each & .eachWithIndex   if/else    ◦ Operador ternario      def ...
Groovy SQLimport groovy.sql.Sqldef sql = Sql.newInstance( jdbc:jtds:sqlserver://serverName/dbName-   CLASS;domain=domainNa...
Domain Specific Languages   Lenguaje para modelar una parte del dominio   Resuelve problemas de    ◦ Definición    ◦ Mod...
   CSS Styles      Datasources por entornos en                     groovyExternos         Internos                      ...
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 comp...
@fatimacasau
@fatimacasau
   Plataforma para el desarrollo de aplicaciones web JavaEE   Construido sobre un conjunto de frameworks consolidados  ...
   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...
   5 veces menos líneas de código    ◦ Menos código + menos errores = productividad   Fly reloading    ◦ Recarga en cal...
   JDK 1.6 y JAVA_HOME   Download GRAILS (v. 2.1)    ◦ Trabajar por línea de comandos  definir GRAILS_HOME    ◦ Trabaja...
grails [environment]* [command name]   Environments:                                  dev, test, prod   o si es un entor...
   Configuración básica:    ◦ grails-app/conf/Config.groovy         Ejemplo:                                   my.proper...
   grails.util.Environment   Custom environments   Detección de entornos:environments {                Import grails.ut...
@fatimacasau
   Modelo    ◦ domains – GORM   Vista    ◦   views    ◦   Templates    ◦   Includes    ◦   Tags   Controlador    ◦ cont...
   GORM – Grails Object Relational Mapping    ◦ Hibernate 3   Clases de dominio – POGO’S    ◦ Plain Old Groovy Object   ...
   Relaciones    ◦ One To One    ◦ One To Many    ◦ Many To Many   Finders dinámicos    ◦ findAllBy(), findBy(), findWhe...
   Actions    ◦ Closures    ◦ Métodos que reciben parámetros que vienen del formulario    ◦ Redirect, chain, …       Otr...
   GSP’s    ◦ Groovy Server Pages   templates, includes    ◦ Reutilización de código   Extensa librería de Tags    ◦ Si...
   Ejemplo      class SimpleTagLib {         def emoticon = { attrs, body ->          out << body() << (attrs.happy == tr...
   Inyección automática en:    ◦ Otros servicios    ◦ Controllers    ◦ Domains                 class MyController {      ...
   URL’s bonitas   Configuración    ◦ grails-app/conf/UrlMappings.groovy     class UrlMappings {       static mappings =...
   DSL’s para mapear URL’s a:    ◦ controllers y actions      "/product"(controller: "product", action: "list")    ◦ view...
   Command line    ◦ Para ejecutar      Puerto por defecto 8080:        grails run-app      Especificar un puerto:    ...
@fatimacasau
   jQuery   Ajax   Creación de Plugins   Security    ◦ SpringSecurity Plugin   Internacionalización    ◦ I18n   Test...
   Documentación de grails    ◦   http://grails.org/doc/latest/guide/   Listas de correo    ◦   http://grails.org/Mailin...
@fatimacasau
@fatimacasau
Upcoming SlideShare
Loading in...5
×

Introducción a groovy & grails

3,038

Published on

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
3,038
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Introducción a groovy & grails

  1. 1. Desarrollo ágil de aplicaciones web
  2. 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. 3. @fatimacasau
  4. 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. 5.  Menos líneas dé código Menos errores Expresividad Flexibilidad Aumento de la productividad @fatimacasau
  6. 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. 7. @fatimacasau
  8. 8. Dynamic Typing Tipado dinámico de datos Tiempo de ejecución Ejemplo1: Variables Ejemplo2: Métodos @fatimacasau
  9. 9. Manejo de colecciones Soporte nativo para: ◦ Listas ◦ Rangos ◦ Mapas @fatimacasau
  10. 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. 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. 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. 13.  Otros operadores ◦ Spread *  items*.id ◦ Elvis ?:  def b = a ?: ◦ Safe navigation ?.  object?.property @fatimacasau
  14. 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. 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. 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. 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. 18.  CSS Styles  Datasources por entornos en groovyExternos Internos @fatimacasau
  19. 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. 20. @fatimacasau
  21. 21. @fatimacasau
  22. 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. 23.  Tomcat y H2 incluidos para desarrollo rápido @fatimacasau
  24. 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. 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. 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. 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. 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. 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. 30. @fatimacasau
  31. 31.  Modelo ◦ domains – GORM Vista ◦ views ◦ Templates ◦ Includes ◦ Tags Controlador ◦ controllers ◦ Interacción con servicios ◦ Filtros @fatimacasau
  32. 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. 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. 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. 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. 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. 37.  Inyección automática en: ◦ Otros servicios ◦ Controllers ◦ Domains class MyController { def myService def anyAction(){ //… myService.anyMethod(…) //… } } class MyService { def anyMethod(){ //… } } @fatimacasau
  38. 38.  URL’s bonitas Configuración ◦ grails-app/conf/UrlMappings.groovy class UrlMappings { static mappings = { } } @fatimacasau
  39. 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. 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. 41. @fatimacasau
  42. 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. 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. 44. @fatimacasau
  45. 45. @fatimacasau

×