Moje pytanie może wydawać się bardzo naukowe, ale myślę, że jest to powszechny problem i mam nadzieję, że doświadczeni programiści i programiści udzielą porady, aby uniknąć problemu, o którym wspominam w tytule. Przy okazji, to, co opisuję poniżej, to prawdziwy problem, który staram się proaktywnie rozwiązać w moim projekcie iOS, chcę go za wszelką cenę uniknąć.
Przez maszynę stanów skończonych rozumiem to> mam interfejs użytkownika z kilkoma przyciskami, kilka stanów sesji związanych z tym interfejsem użytkownika i to, co reprezentuje ten interfejs, mam dane, których wartości są częściowo wyświetlane w interfejsie użytkownika, odbieram i obsługuję niektóre zewnętrzne wyzwalacze (reprezentowane przez wywołania zwrotne z czujników). Stworzyłem diagramy stanu, aby lepiej odwzorować odpowiednie scenariusze, które są pożądane i możliwe w tym interfejsie użytkownika i aplikacji. Gdy powoli wdrażam kod, aplikacja zaczyna zachowywać się coraz bardziej tak, jak powinna. Nie jestem jednak pewien, czy jest wystarczająco solidny. Moje wątpliwości wynikają z obserwowania własnego procesu myślenia i wdrażania. Byłem pewien, że wszystko załatwiłem, ale wystarczyło, że wykonałem kilka brutalnych testów w interfejsie użytkownika i szybko zdałem sobie sprawę, że w zachowaniu nadal są luki. Poprawiłem je. Jednak, ponieważ każdy komponent zależy i zachowuje się na podstawie danych wejściowych z innego komponentu, określone dane wejściowe od użytkownika lub źródła zewnętrznego wyzwalają łańcuch zdarzeń, zmiany stanu ... itd. Mam kilka składników i każdy z nich zachowuje się tak, jak Trigger otrzymany na wejściu -> wyzwalacz i jego analizowany nadawca -> wypisuje coś (komunikat, zmianę stanu) na podstawie analizy
Problem polega na tym, że nie jest to całkowicie samowystarczalne, a moje komponenty (element bazy danych, stan sesji, stan niektórych przycisków) ... MOGĄ zostać zmienione, poddane wpływowi, usunięte lub w inny sposób zmodyfikowane, poza zakresem łańcucha zdarzeń lub pożądany scenariusz. (telefon się zawiesza, akumulator nagle się rozładowuje) Spowoduje to wprowadzenie do systemu nieważnej sytuacji, z której system NIE MOŻE BYĆ MOŻLIWY do odzyskania. Widzę to (chociaż ludzie nie zdają sobie sprawy, że to jest problem) w wielu aplikacjach konkurencji, które są w sklepie Apple, klienci piszą takie rzeczy> „Dodałem trzy dokumenty i po przejściu tam i tam nie mogę ich otworzyć, nawet jeśli je zobacz ”. lub „Nagrywam filmy codziennie, ale po nagraniu zbyt logowanego wideo nie mogę włączyć na nich napisów ... a przycisk do napisów nie
To tylko skrócone przykłady, klienci często opisują to bardziej szczegółowo .. z opisów i zachowań opisanych w nich zakładam, że konkretna aplikacja ma awarię FSM.
Tak więc ostateczne pytanie brzmi: jak mogę tego uniknąć i jak chronić system przed samymi blokowaniem?
EDYCJA> Mówię w kontekście jednego widoku kontrolera widoku przez telefon, mam na myśli jedną część aplikacji. Rozumiem wzorzec MVC, mam osobne moduły dla różnych funkcji. Wszystko, co opisuję, dotyczy jednego obszaru roboczego w interfejsie użytkownika.