Мой вопрос может показаться очень научным, но я думаю, что это общая проблема, и опытные разработчики и программисты, надеюсь, получат несколько советов, чтобы избежать проблемы, о которой я упоминаю в заголовке. Кстати, то, что я описываю ниже, является реальной проблемой, которую я стараюсь активно решать в своем проекте iOS, я хочу избежать этого любой ценой.
Под конечным автоматом я имею в виду это> У меня есть пользовательский интерфейс с несколькими кнопками, несколько состояний сеанса, относящихся к этому пользовательскому интерфейсу, и то, что этот пользовательский интерфейс представляет, у меня есть некоторые данные, значения которых частично отображаются в пользовательском интерфейсе, я получаю и обрабатываю некоторые внешние триггеры (представлен обратными вызовами от датчиков). Я сделал диаграммы состояний, чтобы лучше отобразить соответствующие сценарии, которые желательны и допустимы в этом пользовательском интерфейсе и приложении. По мере того, как я медленно реализую код, приложение начинает вести себя все больше и больше, как и должно. Однако я не очень уверен, что это достаточно надежно. Мои сомнения возникают из-за того, что я наблюдаю за ходом своего мышления и процесса реализации. Я был уверен, что у меня есть все, но этого было достаточно, чтобы сделать несколько грубых тестов в пользовательском интерфейсе, и я быстро понял, что в поведении все еще есть пробелы. Я исправил их. Тем не мение, поскольку каждый компонент зависит и ведет себя на основе входных данных от какого-либо другого компонента, определенного входного сигнала от пользователя или некоторых внешних источников, запускает цепочку событий, изменений состояния ... и т. д. У меня есть несколько компонентов, и каждый из них ведет себя так, как будто Триггер получен на входе -> триггер и его отправитель проанализирован -> вывести что-то (сообщение, изменение состояния) на основе анализа
Проблема в том, что это не является полностью самодостаточным, и мои компоненты (элемент базы данных, состояние сеанса, состояние некоторой кнопки) ... МОГУТ быть изменены, изменены, удалены или иным образом изменены вне области цепочки событий или желаемый сценарий. (телефон выходит из строя, батарея разряжена, телефон внезапно выключается). Это приведет к возникновению недопустимой ситуации в системе, из которой система потенциально НЕ МОЖЕТ быть в состоянии восстановиться. Я вижу это (хотя люди и не понимают, что это проблема) во многих приложениях моих конкурентов, которые есть в магазине Apple, клиенты пишут такие вещи> "Я добавил три документа, и, пройдя туда-сюда, я не могу их открыть, даже если их увидеть. " или "Я записывал видео каждый день, но после записи слишком логичного видео я не могу включить подписи к ним ..., а кнопка для подписей не отображается"
Это только сокращенные примеры, клиенты часто описывают это более подробно. Из описанных в них описаний и поведения я предполагаю, что конкретное приложение имеет пробой FSM.
Итак, главный вопрос: как я могу избежать этого и как защитить систему от самой блокировки?
РЕДАКТИРОВАТЬ> Я говорю в контексте одного представления viewcontroller по телефону, я имею в виду одну часть приложения. Я понимаю шаблон MVC, у меня есть отдельные модули для различной функциональности. Все, что я описываю, относится к одному холсту в пользовательском интерфейсе.