Sobes.tech
Principal

Co je AUS-2?

sobes.tech AI

Odpověď od AI

AUS-2, nebo Asynchronní řízení stavu verze 2, je soubor vzorů a doporučení pro správu stavu v asynchronních aplikacích v jazyce C#. Je zaměřen na zjednodušení práce se kódem obsahujícím mnoho asynchronních operací a na zajištění jeho předvídatelnosti a stability. Hlavní principy AUS-2 zahrnují:

  • Jasné oddělení odpovědností. Stav aplikace je jasně oddělen od logiky, která jej mění.
  • Inkapzuluace změn stavu. Změny stavu probíhají pouze prostřednictvím určitých, kontrolovaných akcí (například příkazů nebo událostí).
  • Přirozeně asynchronní. Všechny operace změny stavu a zpracování vnějších vlivů jsou považovány za potenciálně asynchronní.
  • Použití bezpečných datových struktur. Používají se struktury odolné vůči současnému přístupu z různých vláken.
  • Zaměření na neměnnost (immutable). Pokud možno, používají se neměnné objekty stavu, což usnadňuje sledování změn a zabraňuje nežádoucím vedlejším efektům.

Typické komponenty architektury odpovídající principům AUS-2:

  • Stav (State): Objekt(y), které představují aktuální stav aplikace nebo její části.
  • Akce (Action/Command): Objekt, který popisuje záměr změnit stav.
  • Zpracovatel (Handler/Reducer): Funkce nebo objekt, který přijímá aktuální stav a akci a vrací nový stav. V zpracovateli probíhá veškerá logika změny stavu.

Výhody používání AUS-2:

  • Vylepšená testovatelnost. Díky jasnému oddělení a inkapsulaci je logika změny stavu snadno testovatelná.
  • Předvídatelnost. Změny stavu probíhají pouze prostřednictvím určitých mechanismů, což činí chování aplikace srozumitelnějším a předvídatelnějším.
  • Snadné ladění. Snadnější sledovat, jak a proč se změnil stav aplikace.
  • Škálovatelnost. Architektura se dobře škáluje s růstem složitosti aplikace.

Příklad jednoduché implementace principu (bez použití kompletního frameworku):

// Neměnný stav
public record AppState(int Count);

// Typ akce
public record IncrementAction();

// Zpracovatel
public static class StateHandler
{
    public static AppState Handle(AppState currentState, IncrementAction action)
    {
        // Vytvoříme nový stav místo úpravy stávajícího
        return new AppState(currentState.Count + 1);
    }
    // Další zpracovatelé pro jiné typy akcí...
}

// Příklad použití (zjednodušené, bez zohlednění asynchronnosti a bezpečnosti vláken v tomto konkrétním příkladu)
/*
AppState currentState = new AppState(0);
currentState = StateHandler.Handle(currentState, new IncrementAction());
Console.WriteLine(currentState.Count); // Vypíše 1
*/

AUS-2 není konkrétní knihovna, ale spíše soubor principů, které lze implementovat pomocí různých vzorů (například podobných Reduxu) a knihoven v ekosystému .NET.