Hace un tiempo, Juanse, un compañero de trabajo, me envió un enlace de un framework desarrollado por Evan Miller que se llama ChicagoBoss. Este framework ha sido concebido con Ruby on Rails en mente, no es de extrañar cuando a lo largo de toda la documentación, se hacen referencias a cosas de Ruby on Rails, y las similitudes son tan extraordinariamente grandes, para ser dos lenguajes bastante diferentes.
Los datos y su acceso
En un principio, me resultó curioso, el sistema de ChicagoBoss había resuelto de una forma muy elegante un problema que llevaba tiempo intentando resolver en Erlang: la definición rápida de los modelos. Para un proyecto de ChicagoBoss, un modelo puede definirse tal que así:
-module(person, [Id, Firstname, Lastname]).
Algo bastante impresionante. Agregado con la posibilidad de conectar con base de datos tan variadas como: MySQL, PostgreSQL, MongoDB, Tokyo Tyrant o Mnesia.
Un 'vista'zo
Otro factor bastante curioso, la forma en la que escribir código mezclado con el código HTML en modo de tags, tal y como hacen lenguajes como Ruby (con el erb de rails), JSP, PHP o ASP. Me parecía muy curioso y potente al mismo tiempo. La solución acogida por ChicagoBoss ha sido la misma que se empleó en Django (en Python):
{% for person in people %}
- {{ person.full_name }}
{% endfor %}
El código que hace esta magia es el ErlyDTL.
Por último: los controladores
Los controladores son tan simples de generar como lo son los de Rails. Para quien no haya manejado ninguno de estos sistemas, puede que un ejemplo le resulte aclarador:
-module(book_controller, [Req]).
-compile(export_all).
edit('GET', []) ->
ok;
edit('POST', []) ->
{redirect, "/somewhere"}.
Como se puede ver, si el controlador atiende a la ruta /book/edit
, si lo hace mediante método GET, se ejecutará el primer método retornando simplemente ok
. Si se tratase de un formulario con método POST, entraría por el segundo método y se redireccionaría la página a la ruta /somewhere
.
La capacidad de gestión de los datos entre los modelos y el paso de estos a través del controlador hacia la vista, es igual de potente que en rails, django y frameworks similares. El controlador se hace bastante simple y puede contener código más volcado al flujo de las llamadas y la lógica propia del sitio web que se desee desarrollar.
Las rutas y la administración. Bonus track!
Como agregados, aunque otros frameworks similares tienen también algunas de estas facilidades, como son los ficheros de rutas, nos encontramos por otro lado con la interfaz de administración. La cual nos brinda información del entorno, la posibilidad de escribir ficheros de idioma (para traducir la web) y visualizar las rutas.
Conclusiones
Hace tiempo comentaba la potencia que se comenzaba a ver en el desarrollo de proyectos erlang para la web, ahora, cada vez es más una realidad, gracias a trabajos de tanta calidad como Nitrogen, Erlyweb o este, ChicagoBoss.
Aún no llevo el suficiente tiempo jugando con la herramienta en sí, pero me ha resultado bastante cómoda la generación del entorno (aunque algo buggy, se nota que hay que pulir aún por ahí un poco) y la documentación aún es algo escasa. No obstante, se perfila como un entorno a tener en cuenta por su versatilidad y porque ofrece cosas que en otros entornos son bastante más complejas de conseguir: escalabilidad y redundancia.