Infraestructura Java · Egothor
conflux
Una biblioteca Java deliberadamente pequeña para los casos en que componentes independientes necesitan compartir un poco de estado tipado y reaccionar a sus cambios, sin convertir esa necesidad de coordinación en un framework de inyección de dependencias ni en una arquitectura de aplicación.
El pequeño problema que a menudo termina en un gran grafo de dependencias
Un componente calcula un valor. Varios componentes no relacionados necesitan el valor más reciente y algunos deben reaccionar de inmediato cuando cambia. La solución ingenua es cablear referencias directas por todas partes; la solución «enterprise» puede acabar importando un framework entero. conflux ocupa deliberadamente el espacio intermedio.
- Claves tipadas reducen desajustes accidentales de integración.
- Valor actual + eventos cubren muchos casos de UI e infraestructura.
- Listeners débiles ayudan a evitar retención accidental.
- Alcance pequeño facilita integrar la biblioteca en sistemas mayores.
Un contexto con seguridad de tipos, no un mapa gobernado por cadenas
El contexto utiliza claves tipadas, por lo que el contrato incluye tanto el nombre como el tipo Java esperado. Un mismo nombre no puede significar silenciosamente Integer en un componente y String en otro. Esto facilita razonar sobre el estado compartido y desplaza un error común de integración hacia el punto donde se declara la clave.
Key<Integer> COUNT = Key.of("count", Integer.class);
Ctx.INSTANCE.put(COUNT, 42);
int current = Ctx.INSTANCE.get(COUNT);
Ctx.INSTANCE.addListener(COUNT, value -> refreshView(value));Estado actual compartido
Los componentes pueden recuperar el valor actual sin conocer al productor que lo creó ni transportar una referencia directa al productor por toda la aplicación.
Notificación de cambios
Los listeners reaccionan a las actualizaciones, de modo que los consumidores orientados a eventos no necesitan sondear continuamente el contexto.
Referencias débiles a listeners
Las suscripciones están diseñadas para que olvidar un unsubscribe explícito no convierta automáticamente al bus de eventos en propietario de la vida de todos los listeners.
Uso concurrente
La implementación utiliza colecciones concurrentes y gestión copy-on-write de listeners para mantener útil la primitiva entre hilos de aplicación.
Deliberadamente no es un framework de aplicación
conflux no intenta controlar construcción de objetos, configuración, scheduling ni lógica de negocio. Su valor es precisamente el contrario: un contrato estrecho que puede añadirse a un sistema existente cuando unos pocos módulos independientes necesitan un punto común de encuentro.
Ese alcance reducido también lo hace adecuado como infraestructura dentro de sistemas mayores: resuelve una sola necesidad de coordinación y deja las decisiones arquitectónicas a la aplicación.