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.

Typedclaves compartidasun nombre de clave de contexto queda asociado a un tipo Java coherente
Thread-safecoordinaciónel almacenamiento y los listeners están diseñados para uso concurrente
Weaklistenerslas referencias débiles evitan que una suscripción retenga objetos por accidente
Smallsuperficie APIuna primitiva de coordinación, no un framework de aplicación sustitutivo

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.

Productorescribe un valor tipado Contexto compartidoguarda el estado actual Evento de cambionotifica a suscriptores Consumidoresreaccionan de forma independiente

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.

API conceptualestado compartido con seguridad de tipos
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.

Úselo parapequeño estado compartido · notificaciones entre componentes · coordinación entre módulosNo lo convierta enservice locator para toda dependencia · capa de persistencia · broker distribuido

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.

Recursos del proyecto