16 · activar / desactivar

Coefectos reactivos

Si la dimensión anterior iba de cómo una pieza modifica su entorno, esta va de qué necesita de él.

El punto de partida es una tabla que asocia nombres a capacidades, algo reconocible para cualquiera que haya usado inyección de dependencias.

Lo elegante es lo que ocurre a continuación. Registrar una dependencia en esa tabla tiene exactamente la forma de un cambio en el entorno, así que la maquinaria del capítulo anterior se aplica sin tocar nada. Las dependencias se rastrean y se retiran igual que cualquier otro efecto.

Activar y desactivar

Acceder a algo que no está es un error en tiempo de ejecución. Lo razonable es que una pieza se active solo cuando todo lo que declara está disponible.

Como cada cambio de la tabla pasa por el mismo mecanismo, cada cambio se puede clasificar en el momento.

CambioCuándoQué hace el sistema
activaciónLa pieza pasa a tener todo lo que pedíaLa pone a funcionar
desactivaciónDeja de tenerloAplica su pila de inversas y la retira
irrelevanteNo cambia nada de lo que pedíaNada

La mitad que este mecanismo no resuelve

Aquí es donde se nota que el artículo no se conforma.

El orden entre proveedor y consumidor funciona solo en una dirección. Si A provee algo y B lo necesita, B no puede activarse antes que A.

Al revés falla. Descargar A rompe lo que B necesitaba, pero una notificación por sí sola no puede mantener la capacidad disponible durante todo el desmontaje de B, ni retener la limpieza de A hasta que B haya terminado.

Dos extensiones útiles

  • Extensión uno Aislamiento Permite que un mismo nombre resuelva a cosas distintas según quién pregunte. Sirve para multi-tenencia, para pruebas y para entornos restringidos.
  • Extensión dos Interceptación Permite que el entorno de fuera condicione cómo usa una pieza una capacidad, sin tocar el código de esa pieza. Los ajustes del entorno tienen prioridad sobre los que declara la pieza.

El puente entre las dos dimensiones

Esta es la parte más bonita del artículo y la que más se pierde en los resúmenes.

La independencia de la sección anterior, que es lo que permite deshacer en cualquier orden, no hay que suponerla. Se deriva de una propiedad de las dependencias.

Dos piezas que operan sobre nombres distintos son independientes sin más. Y si comparten nombre, basta con que ese nombre tenga una interfaz donde el orden no importe.

La dimensión temporal se apoya en la espacial. Y eso convierte una condición matemática abstracta en una decisión concreta de diseño de interfaces.