Моє запитання може здатися дуже науковим, але я думаю, що це загальна проблема, і досвідчені розробники та програмісти, сподіваємось, матимуть поради, щоб уникнути проблеми, про яку я згадую в назві. До речі, те, що я описую нижче, - це справжня проблема, яку я намагаюся проактивно вирішити у своєму проекті iOS, я хочу її уникнути будь-якою ціною.
Під машиною з кінцевим станом я маю на увазі це> у мене є інтерфейс користувача з декількома кнопками, кілька станів сеансу, що стосуються цього інтерфейсу, і що цей інтерфейс представляє, у мене є деякі дані, значення яких частково відображаються в інтерфейсі, я отримую і обробляю деякі зовнішні тригери (представлена зворотними дзвінками від датчиків). Я зробив діаграми стану, щоб краще відобразити відповідні сценарії, бажані та допустимі в цьому інтерфейсі та застосуванні. Коли я повільно впроваджую код, додаток починає поводитись все більше, як слід. Однак я не дуже впевнений, що це досить надійно. Мої сумніви випливають із спостереження за моїм власним процесом мислення та впровадження. Я був впевнений, що у мене все охоплене, але цього було достатньо, щоб зробити кілька грубих тестів в інтерфейсі, і я швидко зрозумів, що в поведінці все ще є прогалини .. Я їх зафіксував. Однак, Оскільки кожен компонент залежить і поводиться на основі введення якогось іншого компонента, певного вводу від користувача або якогось зовнішнього джерела, запускає ланцюжок подій, зміни стану ... тощо. У мене є кілька компонентів, і кожен поводиться так, як цей Тригер отриманий на вході -> тригер і його відправник проаналізовано -> вивести щось (повідомлення, зміна стану) на основі аналізу
Проблема полягає в тому, що це не є повністю самодостатнім, і мої компоненти (елемент бази даних, стан сеансу, стан якоїсь кнопки) ... МОЖЕ бути змінено, впливати, видалити або змінити іншим чином поза сферою ланцюжка подій або бажаний сценарій. (телефон виходить з ладу, акумулятор несподівано вимкнеться.) Це призведе до неправомірної ситуації в системі, з якої система потенційно НЕ МОЖЕ НЕ БУДАТСЯ відновитись. Я бачу це (хоча люди не усвідомлюють, що це проблема) у багатьох моїх програмах-конкурентах, які знаходяться в магазині яблук, клієнти пишуть такі речі> "Я додав три документи, і після заходу туди-сюди я не можу їх відкрити, навіть якщо їх побачити ". або "Я записую відео щодня, але після того, як записувати відео із занадто логотипом, я не можу повернути їх підписи .., і кнопка для підписів не робить"
Це просто скорочені приклади, клієнти часто описують це більш детально. З описів та поведінки, описаних у них, я припускаю, що конкретна програма має розбиття FSM.
Отже, остаточне питання - як я можу цього уникнути та як захистити систему від блокування себе?
EDIT> Я розмовляю в контексті одного погляду диспетчера по телефону, я маю на увазі одну частину програми. Я розумію схему MVC, у мене є окремі модулі для чіткої функціональності. Все, що я описую, стосується одного полотна в інтерфейсі користувача.