Я пытаюсь использовать архитектуру Flux в одном из моих проектов.Кто сказал, что действие разрешено в Flux?
Некоторые из моих действий имеют предварительные условия, которые необходимо выполнить, чтобы разрешить отправку этого действия.
В настоящее время это предварительное условие проверки логики внутри мой взгляд кода, что-то вроде этого (псевдокод):
class FooView {
void OnButtonClick() {
if (FooStore.IsButtonClickAllowed) {
Dispatch(ButtonClickAction);
}
}
}
Это выглядит неудобно для меня, потому что теперь моя точка зрения бизнес-логики кода внутри него. Я старался поместить этот проверочный код в свой магазин, но я не могу. У меня более одного магазина, который обрабатывает это действие, и только один из магазинов знает, действительно ли он действителен или нет. Так что это не будет работать:
class FooStore {
void Handle(Action) {
if (Action is ButtonClickAction) {
if (IsButtonClickAllowed) {
FooData.Something();
} else {
// Ignore
}
}
}
}
class BarStore {
void Handle(Action) {
if (Action is ButtonClickAction) {
BarData.Something();
}
}
}
Я не могу сказать от BarStore
если ButtonClickAction
допускается, если я «WaitFor(FooStore)
», а затем попросите его, но это заставит каждый магазин, который обрабатывает это действие, чтобы содержать такая же проверка, приводящая к чему-то действительно грязному.
До сих пор я понимаю, что Action in Flux отправляется только в том случае, если это гарантировано, i.e. действительность действия необходимо проверить перед отправкой. Это означает, что эта проверка должна быть в представлении?
Решение на примере вышеприведенного примера может быть простым: «просто спрячьте кнопку, когда она не разрешена, и этого никогда не произойдет». Но предположим, что у меня есть действие, которое отправляется, когда пользователь попадает в пробел, что мне делать? Я не могу удалить пробел с клавиатуры пользователя, когда действие не разрешено.
P.S. Я не использую React, поэтому вопрос касается только архивного стиля Flux, я даже не использую JavaScript.
Я вижу вашу точку зрения. Но, поскольку действие должно быть газетой, оно не может быть отправлено, когда оно недействительно. Если один магазин отвечает на него с «ошибкой», это действие по-прежнему отправляется в другие магазины, а в других магазинах может изменяться определенное состояние, которое им не нужно. Я использую новый «компонент» под названием «ActionDispatcher», который выполняет необходимые проверки перед отправкой действий, поэтому представления всегда запрашивают «ActionDispatcher» что-то делать, т. Е. * Представление не отправляет действие напрямую. –