Я недавно реализовал дизайн в нашем приложении для решения аналогичной проблемы.Наше приложение работает с рабочими процессами, для выполнения которых требуется различная комбинация шагов.
Как правило, я решил, что сами шаги не хранят информацию.Им также не разрешается разговаривать друг с другом.У них есть указатели на объекты модели, которые содержат информацию.Я не следую ни шаблонам MVC, ни MVP, но я держу Модель отделенной от UI довольно строго.
Каждый шаг рабочего процесса имеет метод OnEnter(bool forward)
и OnExit(bool forward)
, который они необходимы для реализации,В них вы запрашиваете модель для обновления ваших элементов управления или наоборот.Перемещение от одного шага к другому выполняется с помощью StateEngine
. Он сохраняет в стеке все выполненные шаги, а когда нажата кнопка «Назад», текущее состояние - Exit
ed, а предыдущее - Enter
редакторУ движка есть понятие порядка по умолчанию, поэтому большинство шагов просто просят StateEngine
перейти к следующему шагу, каким бы он ни был, но если вы попросите его перейти к определенному шагу, он сделает это.
Перед этим проектом в рабочий процесс вернулась основная проблема с обслуживанием, которая была почти автоматически исправлена в этом проекте.Дизайн не решает проблему голода в мире, но он сохраняет управляемый код мастера.