Estoy de acuerdo con Jason en que Play podría ser mejor que Grails. Con cuatro proyectos de Grails en mi haber (precedidos por dos proyectos de Tapestry y un proyecto de Wicket), estoy mirando seriamente Play ahora.
Una de las cosas que me pareció genial sobre Grails es que "todo es maravilloso". Es decir, utiliza Groovy para escribir todo (excepto el HTML y el CSS): dominios, controladores, servicios, plantillas de página (GSP), bibliotecas de etiquetas, Hibernate API (GORM), pruebas unitarias (GUnit) y compilaciones (GANT). Incluso puede escribir scripts de shell en Groovy. Por lo tanto, ser capaz de codificar todos los aspectos de una aplicación usando un solo idioma nuevamente parecía una simplificación que hacía tiempo que vencía, remontándonos a los días de escribir aplicaciones de escritorio en un solo idioma como C++ o Delphi. Sin embargo, he aprendido que un tamaño no encaja todo aquí.
Por un lado, el soporte IDE para Groovy no es genial. IntelliJ hace el mejor trabajo, pero con Groovy siendo dinámico, solo puede ir tan lejos. Las herramientas de refactorización no capturan (no pueden) todo, por lo que no puedes confiar en ellas al 100%. Esto significa que debe estar especialmente atento con las pruebas unitarias. Una vez más, dado que Grails depende tanto de la "magia" dinámica que ocurre en el tiempo de ejecución, la unidad de prueba en Grails debe confiar en una extensa capa de burla para emularla, y esa capa burlona es peculiar. Un tercer problema es que gran parte del llamado código Groovy que estás escribiendo es en realidad código de dominio específico del idioma (DSL). (Para abreviar, las DSL son short-hand Groovy, aprovechando el hecho de que en Groovy y gran parte de la sintaxis es opcional.) Grails utiliza diferentes DSL para diversas configuraciones, mapeo de URL, etc. y es inconsistente. La forma de especificar la configuración de log4j, por ejemplo, no se parece en nada a cómo se especifican las fuentes de datos, y tampoco se parece a la Java pura en la que se basa Groovy. Entonces, la promesa de "todo es maravilloso" se desmorona de todos modos.
Siendo ese el caso, veo de dónde viene el equipo de Play.
Volver al Java normal para los dominios, controladores, servicios y JUnits tiene sentido.Un tipado fuerte significa que el IDE puede ayudar de manera confiable con inteli-sense, navegación de código, refactorización, etc. (Y así no necesita pagar IntelliJ si está contento con Eclipse.) Tener que escribir un código más detallado para Ganar apoyo de herramientas fuertes parece ser un buen negocio para mí en este momento. Ya veremos.
Me gusta que sigo usando Groovy en las plantillas de página. Sin embargo, me temo que puedo terminar poniendo más código en las plantillas de lo que debería.
No tengo experiencia con JPA, pero parece que está muy cerca de lo que GORM hace por mí, así que es genial.
El soporte Spring IOC en Grails es completamente transparente, mientras que el soporte de Play parece mínimo; sin embargo, creo que el COI está demasiado usado y estoy dispuesto a codificar a mano un mapeo Spring XML en la rara ocasión en que realmente necesito uno. (Una de mis preguntas abiertas es que asumo que JPA tiene soporte para transacciones, por lo que Play no necesita Spring para eso, como hace Grails, ¿no?)
Nunca he sido fan de Python, así que me encogí cuando leí que Play usa Python para sus scripts de compilación. Pero estoy de acuerdo en que los guiones GANT de Grails se ejecutan bastante lento. Además, creo que, si bien GANT es una gran mejora con respecto a XML ANT, sigue siendo difícil entender los conceptos de ANT. Los guiones Grail GANT son bastante intrincados. Entonces, voy a entrar con una mente abierta.
El modelo Reproducir "módulo de aplicación" suena como el modelo de "complemento" de Grails, así que es genial.
Estoy bastante impresionado con la documentación de Play que he leído hasta ahora. Tuve una gran cantidad de preguntas, pero la mitad de ellas fueron respondidas de inmediato.
Voy a informar de nuevo más tarde como yo buceo profundo en
Parece que yet-another-application-framework para mí. – skaffman