Állapotok és állapotgépek

Állapotgépek használata viselkedés és állapotátmenet meghatározásához – társkereső alkalmazásokkal magyarázva

(2020. december 20.)

Mi az állapot?

Az információtechnológiában és az informatikában a rendszert állapotúként ha úgy tervezték, hogy emlékezzen a megelőző eseményekre vagy a felhasználói interakciókra; az emlékezett információkat a rendszer állapotának nevezik .

A rendszer állapotait gyakran a felhasználók viselkedésének összesítése határozza meg. Az államok azért fontosak, mert ez szisztematikusabb módszer annak ellenőrzésére, hogy bizonyos viselkedések bizonyos államokban érvényesek-e vagy sem.

A lámpa állapotai

Vegyünk példaként egy lámpát. Ha zöld volt, akkor a sofőrök és az utasok azt várják, hogy a sárga – és nem a piros – lesz a következő. Amikor sárgára vált, vörösre számítottak, és nem zöldre. Tehát az állapotok itt egyszerűek:

Green -> Yellow -> Red
^ |
|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|

Kövesse a nyilakat (más néven az állapotok megengedett átmeneteit), és a közlekedési lámpája jó.

A randevúalkalmazásokban található mérkőzések állapota

Most vegyünk egy bonyolultabb példaként egy társkereső alkalmazást, képzeljük el, hogy egy alkalmazást építünk az emberek számára, hogy online “egyezzenek”. Tegyük fel, hogy készen állnak az algoritmusok, és el kell kezdenünk írni a felhasználói alkalmazásokban felbukkanó mérkőzések mögötti logikát.

Definiáljunk egy entitást a egyezés először két ember közötti mérkőzést képvisel. Több olyan állapot létezik egy mérkőzésre, amelyet figyelembe kell vennünk, ha azt megterveznénk.

Szükségünk van az állapotokra, hogy az emberek ne láthassák olyan váratlan viselkedéseket, mint például egy véletlenszerű, nem megfelelő személy megjelenése. a képernyőn köszönés.

Fotó: Yogas Design a Unsplash

Gondolatmenetem:

  1. Először is, a mérkőzést létre kell hozni , vagyis bizonyos algoritmuskészlet hogy két embert válasszon ki a mérkőzésre. Természetesen az algoritmusoknak előzetesen meg kell bizonyosodniuk arról, hogy mindketten meccsre készülnek, illeszkednek egymás preferenciáihoz, nincsenek tiltva stb.
  2. Ezután ez a meccs válhat függőben (egy másik személy ellopására vár) vagy nem sikerült az első felhasználó műveletétől függően. Ha a felhasználó jobbra csúsztat (ami a társkereső alkalmazások kifejezésében „szeretlek”), akkor az állapot a létrehozott függőben van . Ha a felhasználó balra csúsztat (vagyis „nem szeretlek”), akkor az állapot állapotra vált ikertelen .
  3. Aztán ha mindkét ember kedveli egymást, akkor a függőben lévő értékről illesztett .
  4. A meccsben résztvevő személyek bármelyike ​​„feloldhatja” a mérkőzést is, így az állapot páratlan .
  5. Azt hiszem, minden állapotváltozást lefedtem. De ezek mind? Hmm … nincs olyan „visszatekerés” nevű fizetett szolgáltatás, amely lehetővé teszi, hogy visszalépj és ellopd újra? Mit kezdjünk ezzel?

Hogyan biztosíthatjuk, hogy minden változtatást belefoglaltunk? Ha igen, akkor hogyan programozzuk?

Mi az az állapotgép?

Módszertan egy entitás viselkedésének modellezésére egy meghatározott életciklussal

Állapotorientált rendszerek felépítésekor az állapotgépek hasznosak a bonyolult átmenetek és kiváltók jobb meghatározásában.

Véges állapotú gépek (FSM)

Ez egy absztrakt gép , amely pontosan a véges számú állapot em egyikében lehet > bármikor. Az FSM egyes bemenetekre reagálva egyik állapotból a másikba válthat; az egyik állapotból a másikba történő változást átmenetnek nevezzük . Az MSZÁ-t állapota, kezdeti állapota és az egyes átmeneteket kiváltó bemenetek listája határozza meg.

Folytassuk a társkereső alkalmazás példájával.Ha létrehozunk egy állapotdiagramot a egyezés , kissé így néz ki:

* Különböző módszereket alkalmazhatnak az érintett felhasználók: akár az egyező ügyfelek, akár a társkereső alkalmazás (platformépítő / vállalat).

Véges számú állapota van, amely a meccs életciklusán belüli összes viselkedést modellezi. Állapotgép felépítéséhez csak be kell tartanunk a sorokat, és meg kell vizsgálnunk, hogy az entitás hogyan reagál a különféle viselkedésekre.

Miért használjak állapotgépet?

Oké, most már tudom, hogy az állapotdiagram nagyon hasznos, mégis miért használnék egy állapotgépet, amikor a kódot írom?

Ugyanabból a példából nézzünk meg néhány egyszerűsített kódot és előtt után egy állami gép vesz részt.

Állapotgép használata előtt

Sok if/else utasítások.

Állapotgép használata után

Hagyja, hogy a ChangeState módszer gondoskodjon az állapotátmenetről a StateTransition típus használatával. Az összes többi módszer most a mérkőzés kezelésének logikájára összpontosíthat.

Mit tehetek még?

Csak néhányat említve:

  • Most azt feltételezzük, hogy a „Rewind” módszerek elég jók ahhoz, hogy a frontend interfészei felhívhassák. A módszerek kezelésének kényesebb módja az, ha ellenőrizzük, hogy a mérkőzést rögzítették-e – és ha igen, tetszik-e vagy sem -, majd eldöntsék, melyik parancsot használják. Ahelyett, hogy hagyná a kezelőfelületet megítélni (és kockáztatná, hogy téves legyen), inkább azt javasoljuk, hogy a MatchEntity osztályban kezeljük.
  • Ha az állapot átáll legyen túl bonyolult, próbáljon meg egy mátrixot használni az aktuális állapotok és parancsok tengelyével. A mátrix adatai lehetnek a frissített állapotok. Így a kód olvashatóbbá válik.

Összegzés

Miért érdemes tehát egy állapotgépet használni? Mivel az állapotváltozó eseményeket (más néven az entitás fontos viselkedését) figyelembe véve ez jobban modellez egy rendszert. Leginkább minden más megoldható alapvető CRUD módszerekkel. Ez is könnyebben olvashatóvá és karbantarthatóbbá teszi a kódot.

Az API-k felépítésével kapcsolatban ne csak a termékmenedzserek által megfogalmazott kérések alapján tervezze meg őket. Tervezze meg az API-kat (legalább a minimális API-kat) az entitás számára a kritikus viselkedéseket és átmeneteket – állapotokat szem előtt tartva.

Referencia

Richard Clayton – Használjon állapotgépeket!

Véges állapotú gépek (FSM, vagy e bejegyzés kapcsán egyszerűen “államgépek”) egy módszertan a…

rclayton modellezésére. silvrback.com

Véges állapotú gép

Véges állapotú gép (FSM) vagy véges állapotú automata (FSA, többes szám: automata), véges automata vagy egyszerűen egy állapot …

hu.wikipedia.org

Egyszerű állapotgép-példa a C # -be?

Éppen ezt tettem hozzá: https://code.google.com/p/ysharp/source/browse/#svn\%2Ftrunk\%2FStateMachinesPoC Here ” …

stackoverflow.com

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük