redefiniendo el mvc con grails
DESCRIPTION
Presentación del tema "Redefiniendo el MVC con Grails" presentada por mí el día Sábado 22 de Agosto en la Reunión de SpringHispano.org, grails.org.mx y JavaMexicoTRANSCRIPT
8va. Reunión de la comunidad Grails.org.mx,
SpringHispano.org y JavaMexico.org
El MVC redefinido con Grails (Controllers y GSP)
José Juan R. Zuñiga (@neodevelop)
Agenda• Reuniones previas• Groovy• MVC• Grails
Reuniones previas• 6ta. Reunión de SpringHispano.org, grails.orgmx y
JavaMexico.org– http://springhispano.org/?q=node/469– http://www.slideshare.net/domingo.suarez/taller-groovy
Reuniones previas• 6ta. Reunión de SpringHispano.org, grails.orgmx y
JavaMexico.org– http://springhispano.org/?q=node/374– http://www.slideshare.net/neodevelop/spring-mvc-final-presentatio
n– http://www.slideshare.net/domingo.suarez/grailsorgmx-priemra-reu
nion-presentation
Lo más importante de todo esto…
Los ponentes…
Hablemos de MVC• MVC = Model – View – Controller • Es un patrón de diseño que provee un mecanismo para
construir una esbelta y limpia capa web• Claramente separa el negocio, la navegación y la lógica de
presentación• Aunque…ya no solo aplica a Web, ahora también es
implementado en Desktop( el mejor caso: Griffon - ?:D )
¿Cómo trabaja MVC?
Motivaciones• Facilita la carga de mantenimiento
– Los cambios en el negocio tienen impacto mínimo en el mejor de los casos nulo
• Facilita el desarrollo en un equipo multidisciplinario– Zapatero a tu zapato, DBA a tu base de datos, desarrollador de
persistencia a tus DAO’s, Diseñador a tu diseño….
• Uso de herramientas especializadas– Existen lenguajes de plantillas y etiquetado que son mejores para
crear HTML
• Facilita las pruebas– Podríamos probar mucho más código fuera de un contenedor Web
Frameworks MVC en Java• Struts• Turbine• Expresso• Tapestry• Apache Cocoon• Maverik• Anvil• Jaffa• Japple• JPublish• Jucas• WebOnSwing• Chrysalis
• VRaptor• Swinglets• Millstone• Wicket• Java Server Faces
– MyFaces– Tomahawk– IceFaces– Trinidad– Tobago
• SpringMVC
Otros frameworks MVC• Ruby
– Ruby on Rails• Perl
– Catalyst– Cyclone– Maypole– Solstice– …
• PHP– Zend– Tlalokes– Kumbia– CakePHP– …
• Python– Turbogears– Django
• .Net– MonoRail– Maverick– ASP.Net MVC
Pero nosotros hablaremos de…
¿Qué es Grails?• Una plataforma para desarrollo ágil en Web• Un framework MVC full-stack
¿Qué es Grails?• Open Source• Corre en la JVM
¿Qué es Grails?• Desarrollo de aplicaciones con Groovy• Altamente expresivo
¿Qué es Grails?• Totalmente orientado a objetos• Dinámico• Sintaxis familiar• Perfecta integración con Java
¿Qué es Grails?• Convención sobre configuración• DRY (Don’t repeat yourself)
Stack de tecnologías de Grails
¿qué me provee?
MVC zero-configuration Dependency_Injection gsp transacciones
JNDI groovy Internacionalización Web_Flow Tag_libraries
Caching hibernate scaffolding REST Layouts AJAX Jetty Unit
testing Integration testing grails plugins quartz acegi activemq
amazon-s3 gae axis camel criteria GORM dwr ext Spring
flex freemarker java geoip gwt ivy jpa jquery ldap mail openid paypal pdf sakai
springmvc taggable terracotta tomcat twitter webtest xfire yui
Repasemos un poco…
Recordemos nuestro HolaMundo(Java)public class MiClase{
private String nombre;
public void setNombre(String nombre){this.nombre = nombre;
}
public String getNombre(){return this.nombre;
}
public String saluda(){return "Hola " + nombre + "!!!";
}
public static void main(String[] args){MiClase m = new MiClase();m.setNombre("SpringHispano");System.out.println(m.saluda());
}
}
Recordemos nuestro HolaMundo(Groovy)public class MiClase{
private String nombre;
public void setNombre(String nombre){this.nombre = nombre;
}
public String getNombre(){return this.nombre;
}
public String saluda(){return "Hola " + nombre + "!!!";
}
public static void main(String[] args){MiClase m = new MiClase();m.setNombre("SpringHispano");System.out.println(m.saluda());
}
}
Mejor: A la manera Groovy!!!class MiClase{ String nombre def saluda(){ return "Hola $nombre !!!"; } }
def m = new MiClase()m.setNombre("SpringHispano")println(m.saluda())
MVC en Grails• Modelo
– Clases del dominio– Validaciones en las clases de dominio– GORM– Se puede personalizar el mapeo– Relaciones entre clases
• Uno a Uno• Uno a Muchos• Muchos a Muchos
– Herencia– Objetos embedidos– Testing
MVC en Grails• Controller
– Definidos por Acciones en Closures– Provee de atributos en el request que facilitan el manejo
• Ejemplos: flash, params– Provee un scope adicional a context y session: flash– Mejora en el manejo del Data Binding a través de params– Command Objects– Restricciones en los métodos HTTP– Manejo de upload de archivos más sencillo– Interceptores– Filtros– Testing
MVC en Grails• View
– Scriptlets– GSP– Provee de una librería de tags poderosa
• Tags lógicos• Tags iterativos• Tags para crear vínculos
– Incluso podemos crear las propias :D– Sencillismo manejo de formularios a través de Tags– Paginación– Uso de templates– Ajax– Testing
Un ejemplo…• Claro si no a que venimos a la reunión…• Creemos una aplicación…• Veamos que podemos hacer enfocandonos en el MVC…
Más Grails• Mappings• Internacionalización• Ajax• WebFlow• GORM• Servicios• Plugins• Seguridad• Web Services• Más…
8va. Reunión de la comunidad Grails.org.mx,
SpringHispano.org y JavaMexico.org
¿Preguntas?
…o comentarios…http://springhispano.org
http://grails.org.mx@neodevelop