Ввести сущность State Locator
По мере развития фреймворка появилось новые задачи, для которых в будет полезна будет новая сущность "локатор":
- Имеет свои особенные правила валидации
- Можно сериализовать в JSON и десериализовать обратно
- Можно сериализовать в URL
- Можно сериализовать в URI / DSN
- Можно хранить в БД в качестве адреса куда следует перевести стейт-машину в ходе рассылок
- Можно клонировать с подменой части параметров (полезно для пагинации, аналог относительного URL)
- Можно добавлять префиксы, чтобы использовать вложенные роутеры
В отличии от класса состояния локатор не хранит в себе схему параметров.
Возможно, роутер и стейт-машину стоит дописать, чтобы стейты при редиректе возвращали только локатор, а не сам стейт. Такой подход кажется более безопасным за счёт лучшей изоляции между стейтами. Возможно, тут появляются новые точки расширения функциональности. Например, тогда код стейта не обязан иметь прямоу доступ к роутеру другого django-приложения с нужным стейтом.
На уровне кода локатор состояния может быть реализован в виде отдельного класса с методами. К нему в комплекте прилагаются поле Django ORM, поле и виджет Django Forms.
Локатор может быть не только у чат-бота, но у любой стейт-машины. Причем, в рамках одного проекта может использовать несколько стейт-машин, для каждой из которых есть локаторы:
- Локатор стейт-машины обычного чат-бота
- Локатор стейт-машины триггерной рассылки
- Локатор стейт-машины воронки