tgoop.com/emacsway_chat/6161
Last Update:
В чем заключается основная проблема.
Доменная Модель на сервере принимает одну Команду и производит от одного и более Доменных Событий.
Важно подчеркнуть, что Доменные События являются фактом изменения состояния Доменной Модели, т.е. они производятся Доменной Моделью, т.е. без Доменной Модели произвести Доменное Событие технически невозможно (кроме отдельных исключительных случаев).
При этом, если мы хотим иметь Доменные События реверсируемые, то нам необходимо атомарно реверсировать все события, произведённые одной Командой. Для этого события прошиваются идентификатором запроса обычно в виде CorrelationId.
Отсюда вывод - возможно одно из двух:
Вариант 1. Фронт располагает Доменной Моделью и производит Доменные События. При этом они становятся бесполезны для публичного API сервера, принимающего Команды. Они заходят на сервер в обход этого публичного API и мержатся в хранилище, если они, разумеется, не конфликтуют с Событиями конкурентных потоков.
При этом все События должны быть прошиты своими зависимостями на стороне клиента. Признаюсь, я пока не понимаю, как в этом случае может помочь Redux-like store, разве что https://github.com/m4ss1m0g/mediatr-ts
Вариант 2. Фронт не располагает Доменной Моделью и не способен производить Доменные События. При этом Фронт в состоянии производить Команды, отправлять их на сервер, и в режиме server-side event получать Доменные События с сервера. Но тогда получается, что Redux-like Store на самом деле работает не с Событиями, а с Командами, особенно в случае оптимистического интерфейса, что идет в разрез с его официальной документацией.
Либо же он действительно работает с Событиями, которые получает с сервера: Клиент -> Команда -> Сервер -> Доменная Модель -> Доменное Событие -> WebSocket -> Клиент -> Состояние Redux-like Store -> HTML.
И вот здесь вопрос в том, на что должен реагировать Store: оптимистично на Команду, или пессимистично на Доменное Событие с Сервера?
Но если он реагирует на Команду, тогда reducer является обработчиком Команды, и тогда не должно быть никаких Команд над Store. Именно так и сделал Алексей Зимарев.
А если он реагирует на Событие, полученное с сервера, тогда действительно, команда живет в отдельном слое над Store.
BY Ivan in emacsway-chat

Share with your friend now:
tgoop.com/emacsway_chat/6161