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.
| Cambio | Cuándo | Qué hace el sistema |
|---|---|---|
| activación | La pieza pasa a tener todo lo que pedía | La pone a funcionar |
| desactivación | Deja de tenerlo | Aplica su pila de inversas y la retira |
| irrelevante | No cambia nada de lo que pedía | Nada |
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.