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.