Hanami: inyección de dependencias y gestión de componentes

Fuentes: Hanami: Dependency Injection and Component Management

Hanami es un framework para Ruby que introduce abstracciones de nivel de sistema para mejorar la gestión de dependencias y la inicialización de componentes. A diferencia de frameworks como Rails, que dependen de la carga automática de archivos, Hanami permite declarar explícitamente las dependencias mediante el módulo Deps. Esto facilita la identificación de dependencias dispersas en el código y permite inyectar instancias de componentes en cualquier clase, no solo en acciones o repositorios.

El sistema opera registrando cada archivo de la carpeta app/ como un componente, asignándole una clave basada en su ruta. Hanami inyecta instancias listas para usar en lugar de cargar el código manualmente. Sin embargo, el autor señala limitaciones prácticas: la lógica de inicialización se genera automáticamente, por lo que las clases con lógica personalizada deben pasar explícitamente las dependencias inyectadas a super(). Además, todos los componentes se registran por defecto, lo que puede ser innecesario para objetos de valor que no requieren inyección; en estos casos, se puede usar el comentario auto_register: false. También existe el riesgo de errores tipográficos en las claves de registro, que no se detectan hasta la ejecución, aunque la clave permite localizar rápidamente el archivo fuente.

Por defecto, los componentes se memorizan (se instancian una vez y se reutilizan), lo que exige que sean sin estado. En entornos de prueba, esta memorización se desactiva para evitar fugas de datos entre peticiones. Hanami también ofrece 'Providers' para gestionar componentes globales, similar a los initializers de Rails pero con un ciclo de vida más controlado (prepare, start, stop), permitiendo registrar dependencias globales como Redis de manera ordenada y predecible.