Inyectando dependencias en Windows 8 Metro

Cuando empezamos a ver como mantener simple el código de una aplicación metro, una de las primeras cosas que se nos ocurrió fue mirar en que nos podían ayudar los principios SOLID. Y empezamos por aplicar el principio de responsabilidad única. Eso nos llevó a crear clases con una única razón p/cambiar, más simples.

Pero también a tener una red de dependencias un poco más compleja entre nuestros objetos. Lo primero que hicimos fue resolver estas dependencias en el constructor. Pero después nos preguntamos, cómo sería esto si tuviésemos un contenedor que resuelva las dependencias?

Tomando la idea de un contenedor de dependencias liviano (pimple), la posibilidad de hacer funciones anónimas en javascript y un framework unit testing p/windows 8 (QUnit-Metro) hicimos un contenedor muy simple, de solo 27 líneas. Es precario, pero resuelve lo que necesitamos.

Los test:

El código que pasa los test:

Así configuramos las dependencias:

(luego de ver esté video del tío Bob Martín, me pregunto si este “cableado” revela la intención de la aplicación)

Y así pedimos al contenedor por un objeto desde la aplicación:

El código completo: https://gist.github.com/3320664

Algo interesante de empezar a usar un contenedor de dependencias, es que nos abre la posibilidad de hacer testing unitario de nuestros objetos. Y dado que probar desde la UI es lento, esto puede ser una buena ventaja.

Si bien agregamos un nivel de indirección en nuestro código (ahora hay que pasar por el contenedor), estamos separando la instanciación del uso. La instanciación a veces implica cosas de configuración, conocer dependencias, lo cual es otra responsabilidad y agrega complejidad. Como dicen por ahi, una de cal y una de arena.

Ahora para nosotros es muy fácil cambiar una query por otra con cache, por ejemplo para hacer pruebas de la UI más rápidamente. O cambiar los tiempos de expiración del cache. Todo esto está en quien cablea las dependencias (containerWiring.js).

saludos!

One thought on “Inyectando dependencias en Windows 8 Metro

  1. Muy bueno.
    Nunca me había planteado el tema de inyección de dependencias para JS, una buena idea.
    Tampoco tenía el Array.filter, copado.

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>