En cada sistema hay al menos un
componente que crea, coordina y supervisa a los otros. Yo llamo a este
componente «Main».
El último detalle
El componente «Main» es el último detalle, la política más baja. Este es el punto
de entrada inicial al sistema. Nada que no sea otra cosa que el sistema
operativo depende de este. Su trabajo es crear todas las factorías, estrategias
y otras facilidades globales para más tarde tomar el control sobre sobre las
porciones abstractas de alto nivel del sistema.
Es en este componente «Main» donde las dependencias se deberían inyectar por un framework
de inyección de dependencias. Una vez que estas están inyectadas en «Main»,
este debería distribuir aquellas dependencias normalmente sin usar el framework.
Piensa en el «Main» como en el más sucio de todos los componentes sucios.
Considera el siguiente componente «Main» de una versión reciente de «Hunt the Wumpus».
Se puede apreciar como este carga todas las cadenas que no se quiere conocer sobre ellas
en el cuerpo principal del código.
Aquí está la función «Main». Se puede observar como esta usa la «HtwFactory» para crear
el juego. Esta pasa el nombre de la clase «htw.game.HuntTheWumpusFacade»,
porque esta clase es incluso más sucia que «Main». Esto previene cambios en esa
clase de manera que «Main» No tenga que recompilar/desplegar.
Observe también cómo «main» crea el flujo de entrada y contiene el bucle principal del
juego, interpretando la entrada simple de comandos pero delegando todos los
procesos a otros componentes de alto nivel.
Finalmente, observe que el «main» crea el mapa.
La clave aquí es que «Main» es un módulo de bajo nivel sucio en el círculo más exterior
de la arquitectura limpia. Carga todo para el sistema de alto nivel y para más
tarde cederle el control.
Conclusión
Se puede considerar a «Main» como un plugin a la aplicación, un plugin que
establece las condiciones iniciales y configuraciones, encontrando todos los
recursos exteriores y cediendo el control a las políticas de alto nivel de la
aplicación. Desde que este es un plugin, es posible tener varios componentes
«Main», uno por cada configuración de tu aplicación.
Por ejemplo, tú podrías tener un plugin «Main» para el entorno de desarrollo, otro
para el de test y otro para producción. Se podría tener un plugin para cada
país que se despliegue o cada jurisdicción o cada cliente.
Cuando se piensa en «Main» como un componente plugin, ubicado detrás de un límite
arquitectónico los problemas de configuración se resuelven más fácilmente.
No hay comentarios:
Publicar un comentario