Ахитектура мастера покупок. Как организовать шаги, ветвления и прочее?
Мастер покупки в онлайн игрушке.
Реализация только на клиентской стороне.
Есть юзер.
Есть ряд товаров (золото, премиум и т.д.)
Для некоторых товаров надо указывать доп. параметры. для золота номер счета, для премиума - тип премиума.
Есть ряд платежных систем (яндекс, киви, виза и т.д.)
Для некоторых платежных систем надо указать доп параметры (для киви - телефон)
Если покупаешь много золота через визу, то получаешь бонус.
Хочу сделать в виде мастера с шагами:
выбор юзера
выбор товара
доп.параметры товара
платежная система
доп. параметры
итоги и переход к оплате.
Естественно, завтра может измениться список товаров и платежных систем.
Надо придумать механизм шагания туда-сюда и в нем предусмотреть случай "вернулся на два шага назад и поменял логику следующих шагов или не поменял".
Ума не приложу, как построить код.
Напрашивается некий управляющий класс, который оперирует объектами-шагами.
Где-то хранится общий контекст (данные мастера, которые заполняют разные шаги)
Как организовать хранение/управление объектами-шагами?
Кто дожен знать, какой следующий/предущий шаг ?
Например. Выбрал покупку премиума через киви, указав номер телефона для этого самого киви. Потом откатился обратно, указал покупку грамма золота. Киви телефон надо не потерять, но! грамм золота стоит меньше минимальной суммы оплаты через киви. О чем клиента надо предупредить.
Если такая заморочка с зависимостями сложна, то тогда остановиться на варианте "при возврате после отката всё вводить новой".
Вообще-то, пока у вас клиент находится на одной и той же странице, хранение данных не нужно. Если он возвращается на сайт с сайта платежной системы - то в инпутах формы с атрибутом "автозаполнение" будут предыдущие значения.
Куки и прочее хранение нужно, если у вас клиент скачет по страницам сайта. А у вас, как вы утверждаете, все на клиенте.