В чем различие между Action, AsyncAction и PotAction в библиотеке Diode для scalajs и что подходит для аутентификации?

В scala а также scalajs библиотека Diode Я использовал, но не совсем понял PotAction класс и только недавно обнаружил AsyncAction класс, оба из которых, кажется, предпочтительнее в ситуациях, связанных с асинхронными запросами. Хотя я это понимаю, я не совсем понимаю проектные решения и выбор имен, которые, похоже, предполагают более узкий вариант использования.

В частности, оба AsyncAction а также PotAction требовать initialModel и next как будто оба моделируют асинхронный запрос для некоторого вида обновляемого, обновляемого контента, а не команды в смысле CQRS. Между прочим, у меня есть открытый вопрос относительно синхронных действий на входах формы.

Я имею в виду несколько конкретных случаев использования. Я хотел бы знать набросок (не спрашивая о реализации, просто концепция), как вы используете что-то вроде PotAction в сочетании с любым из:

  • Проверка подлинности имени пользователя / пароля в обычном потоке
  • Аутентификация в стиле OpenAuth с участием стороннего производителя и перенаправление
  • Аутентификация токена или куки за кулисами
  • Проверка входных данных на стороне сервера
  • Подача команды для удаленной оболочки

Все они, кажется, немного отличаются по своей природе от того, что я видел, используя PotAction но я действительно хочу использовать это, потому что это уже было полезно, когда я, скажем, рендерил что-то на основе текущего состояния Pot,

1 ответ

Решение

Исторически говоря, PotAction пришел первым, а затем в более позднее время AsyncAction был обобщен из этого (для поддержки PotMap а также PotVector), что может объяснить их отношения немного. Оба обеспечивают абстракцию и обработку состояний для обработки асинхронных действий, которые извлекают удаленные данные. Таким образом, они были созданы для очень конкретного (и общего) варианта использования.

Однако я бы не стал использовать их для аутентификации, так как обычно это происходит еще до загрузки приложения или любых данных, запрашиваемых с сервера.

Проверка формы, как правило, синхронная вещь, вы не делаете это в фоновом режиме, пока пользователь делает что-то еще, и снова Async/PotAction не очень хорошее совпадение и не дают большой добавленной стоимости.

Наконец, для случая использования удаленной команды PotAction может подойти, если вы хотите показать результаты команды пользователю, когда они будут готовы. возможно PotStream будет даже лучше, в зависимости от того, генерирует ли команда постоянный поток данных или только одно сообщение.

В большинстве случаев вы должны использовать различные Pot структуры для того, для чего они предназначены, то есть выборки и обновления удаленных данных, и, возможно, применение некоторых идей или внутренних моделей (таких как механизм повторных попыток) к другим типам запросов.

Все Pot материал был отделен от ядра Diode в его собственный модуль, чтобы подчеркнуть, что они просто удобные помощники для работы с Diode. Разработчики должны свободно создавать своих собственных помощников (и вносить свой вклад в Диод!) Для новых вариантов использования.

Другие вопросы по тегам