¿Play o Spring?

Mariano Ruiz
Grayshirts
Published in
3 min readOct 7, 2016

--

En Grayshirts implementamos muchos proyectos de nuestros clientes con Play Framework 1.x. Cuando lo empezamos a usar años atrás lo elegimos por su simplicidad, batería de opciones pre-configuradas y performance. Pero luego vino Play 2, y de Play 1 solo quedó el nombre: el framework cambió completamente, incluso el lenguaje principal ahora es Scala, si bien sigue siendo una herramienta que corre sobre la JVM, y siguen soportando el lenguaje Java.

Peor aún, si hubiéramos afrontado el costo de migrar el código de alguna de nuestras aplicaciones a Play 2.0, luego hubiéramos tenido que hacer lo mismo al movernos a la última versión 2.5, que sufrió un fuerte refactor, y todo parece indicar que en la próxima versión mayor (3.0) sucederá lo mismo. Entonces aquí un punto fuerte a favor de su competidor: Spring al igual que Play está en constante evolución, pero manteniendo una fuerte compatibilidad hacia atrás.

Hace poco un compañero de Grayshirts hizo un buen análisis sobre la evolución de ambos frameworks: “Spring se parece cada vez más a Play, y Play a Spring”, y es cierto: con la llegada de Spring Boot, el framework de Pivotal agregó al stack algo que Play tenía desde sus principios: una herramienta para crear y gestionar fácilmente por línea de comandos un proyecto, sin todo el overhead de tener que configurar uno por uno los módulos y librerías, integraciones con BBDD, etc. Del lado de Play Framework, en la versión 2.5 incluyeron uno de los aspectos más criticados pero necesarios de Spring: Inyección de dependencia.

Veamos que nos ofrecen Play 2+ y Spring 4+:

Tabla comparativa de ambos frameworks: Play vs Spring

¿Y si seguimos con Play 1.x?

Play 1.x aún es mantenido, pero por la comunidad, Lightbend Inc (previamente Typesafe) deprecó su desarrollo. Las nuevas versiones solo contienen bugfixing, speed improvements y algunos updates menores de dependencias.

Para aquellos que aún tienen muchos proyectos en esta rama del framework, y se preguntan cuales son las limitaciones que encontramos en Play 1, que Play 2 y Spring no padecen, son las siguientes:

  • Pobre soporte para desarrollar APIs REST: no soporta el verbo PATCH, el binding de parámetros es muy básico y no serializa/deserializa automáticamente mensajes JSON.
  • No soporta las últimas versiones de MongoDB, al ser incompatible con las últimas versiones de Morphia y el driver Java. Se pueden usar las últimas versiones de la base de datos, pero sin poder hacer uso de los nuevos features. Además hay ciertos bugs de la última versión del driver y el plugin de Morphia que nunca fueron corregidos, como el mal funcionamiento de las propiedades lazy. Posiblemente suceda lo mismo con nuevos features de BBDD relacionales.
  • Es difícil encontrar para Play 1.x librerías o información sobre cómo integrarlo con otras tecnologías nuevas.

--

--