Sobes.tech
Principal

Kas yra AUS-2?

sobes.tech AI

Atsakymas iš AI

AUS-2, arba Asinchroninio būsenos valdymo 2 versija, yra šablonų ir rekomendacijų rinkinys, skirtas valdyti būseną C# asinchroninėse programose. Jis siekia supaprastinti kodą, kuriame yra daug asinchroninių operacijų, ir užtikrinti jo numatomumą bei stabilumą. Pagrindiniai AUS-2 principai yra:

  • Aiškus atsakomybės pasidalijimas. Programos būsena aiškiai atskirta nuo logikos, kuri ją keičia.
  • Būsenos pokyčių inkapsuliacija. Būsenos pokyčiai vyksta tik per tam tikras, kontroliuojamas veiksmus (pavyzdžiui, komandas ar įvykius).
  • Prigimtinai asinchroniškas. Visi būsenos keitimo ir išorinių poveikių apdorojimai laikomi potencialiai asinchroniniais.
  • Naudojamos saugios duomenų struktūros. Naudojamos duomenų struktūros, atsparios vienalaikiam prieigai iš skirtingų srautų.
  • Orientacija į nekintamumą (immutable). Jei įmanoma, naudojami nekintami būsenos objektai, kurie palengvina pokyčių sekimą ir užkerta kelią nepageidaujamiems šalutiniams poveikiams.

Tipinės architektūros komponentai, kurie atitinka AUS-2 principus:

  • Būsena (State): Objektas(-ai), atstovaujantys(-ys) dabartinę programos būseną arba jos dalį.
  • Veiksmas (Action/Command): Objekas, apibūdinantis ketinimą pakeisti būseną.
  • Apdorotojas (Handler/Reducer): Funkcija arba objektas, kuris priima dabartinę būseną ir veiksmą, ir grąžina naują būseną. Būtent apdorotojoje vyksta visa būsenos keitimo logika.

Privalumai naudojant AUS-2:

  • Pagerinta testuojamumas. Dėl aiškaus pasidalijimo ir inkapsuliacijos būsenos keitimo logika tampa lengvai testuojama.
  • Numatomumas. Būsenos pokyčiai vyksta tik per tam tikrus mechanizmus, todėl programos elgesys tampa aiškesnis ir numatomesnis.
  • Lengvas derinimas. Lengviau sekti, kaip ir kodėl pasikeitė programos būsena.
  • Mastelio keitimas. Architektūra gerai masteliuojasi su programos sudėtingumo augimu.

Paprastas pavyzdys, kaip įgyvendinti principą (be pilno framework'o):

// Nekintama būsena
public record AppState(int Count);

// Veiksmo tipas
public record IncrementAction();

// Apdorotojas
public static class StateHandler
{
    public static AppState Handle(AppState currentState, IncrementAction action)
    {
        // Sukuriame naują būseną vietoje esamos keitimo
        return new AppState(currentState.Count + 1);
    }
    // Kiti apdorotojai kitiems veiksmų tipams...
}

// Pavyzdys naudojimo (supaprastintas, be asinchroniškumo ir srautų saugumo šiuo konkrečiu pavyzdžiu)
/*
AppState currentState = new AppState(0);
currentState = StateHandler.Handle(currentState, new IncrementAction());
Console.WriteLine(currentState.Count); // Išves 1
*/

AUS-2 nėra konkreti biblioteka, o greičiau principų rinkinys, kurį galima įgyvendinti naudojant įvairius modelius (pavyzdžiui, panašius į Redux) ir bibliotekas .NET ekosistemoje.