Sobes.tech
Principal

¿Qué es AUS-2?

sobes.tech AI

Respuesta de la IA

AUS-2, o Gestión Asíncrona del Estado de la segunda versión, es un conjunto de patrones y recomendaciones para gestionar el estado en aplicaciones asíncronas en C#. Está dirigido a simplificar el trabajo con código que contiene múltiples operaciones asíncronas y a garantizar su predictibilidad y estabilidad. Los principios principales de AUS-2 incluyen:

  • Claridad en la separación de responsabilidades. El estado de la aplicación se separa claramente de la lógica que lo modifica.
  • Encapsulación de los cambios de estado. Los cambios de estado ocurren solo a través de acciones o comandos controlados.
  • Naturaleza asíncrona. Todas las operaciones de cambio de estado y procesamiento de influencias externas se consideran potencialmente asíncronas.
  • Uso de estructuras de datos seguras para hilos. Se emplean estructuras de datos resistentes al acceso concurrente desde diferentes hilos.
  • Orientación a la inmutabilidad. Siempre que sea posible, se utilizan objetos de estado inmutables, lo que facilita el seguimiento de cambios y previene efectos secundarios no deseados.

Los componentes típicos de una arquitectura que sigue los principios de AUS-2 pueden ser:

  • Estado (State): Objeto(s) que representan el estado actual de la aplicación o de una parte de ella.
  • Acción (Action/Command): Objeto que describe la intención de cambiar el estado.
  • Manejador (Handler/Reducer): Función u objeto que recibe el estado actual y la acción, y devuelve un nuevo estado. Es en el manejador donde ocurre toda la lógica de cambio de estado.

Ventajas de usar AUS-2:

  • Mejorabilidad en las pruebas. Gracias a la clara separación y encapsulación, la lógica de cambio de estado es fácil de probar.
  • Predecibilidad. Los cambios de estado ocurren solo a través de mecanismos definidos, haciendo que el comportamiento de la aplicación sea más comprensible y predecible.
  • Facilidad de depuración. Es más sencillo rastrear cómo y por qué cambió el estado de la aplicación.
  • Escalabilidad. La arquitectura escala bien a medida que crece la complejidad de la aplicación.

Ejemplo de implementación sencilla del principio (sin usar un framework completo):

// Estado inmutable
public record AppState(int Count);

// Tipo de acción
public record IncrementAction();

// Manejador
public static class StateHandler
{
    public static AppState Handle(AppState currentState, IncrementAction action)
    {
        // Crear un nuevo estado en lugar de modificar el existente
        return new AppState(currentState.Count + 1);
    }
    // Otros manejadores para otros tipos de acciones...
}

// Ejemplo de uso (simplificado, sin considerar asincronía ni seguridad en hilos en este ejemplo específico)
/*
AppState currentState = new AppState(0);
currentState = StateHandler.Handle(currentState, new IncrementAction());
Console.WriteLine(currentState.Count); // Mostrará 1
*/

AUS-2 no es una biblioteca específica, sino más bien un conjunto de principios que pueden ser implementados usando diferentes patrones (por ejemplo, similares a Redux) y bibliotecas en el ecosistema .NET.