В чем различие между 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. Разработчики должны свободно создавать своих собственных помощников (и вносить свой вклад в Диод!) Для новых вариантов использования.