🔥

Тред (@art_al_ar)


Что такое стейт-менеджер (СТМ), кто-нибудь видел определение? Откуда этот термин вообще взялся и за что отвечает? (я не знаю, буду благодарен если поделитесь) Но, давайте попробуем описать свойства СТМ и вывести из них определение.

Стейт-менеджер, очевидно из названия, ответственен за управление каким-то состоянием, т.е. в нем описаны обстоятельства перехода одного состояния в другое.

Это описание может быть реализовано разными способами: - прямой доступ к данным в представлении ЯП (MobX) - собственный язык запросов (?Datalog) - предподготовленные запросы (похоже на хранимые процедуры)

предподготовленные запросы можно разделить на: - курсор (ну например github.com/artalar/pathon) - линза (github.com/calmm-js/kefir…) - метод (ООП) - action (Flux) - таблица переходов (конечный автомат).

(способы переходов отсортированы от императивщены к декларативщене)

Но это еще не все, практика подсказывает, что, помимо чтения и записи, необходимо реагировать на изменения и кмк именно тут начинается главная работа СТМ.

Дело в том что самое сложное - это именно определение того что изменилось. Часто, в зависимости от того каким образом автор СТМ решил определять изменения, будет выбран тот или иной тип описания изменений - это очень связанные вещи (хотя и не абсолютно).

Типы определения изменений: - паттерн заместитель (прокси и геттеры с сетерами) для перехвата каждой записи - подписка на предподготовленные запросы - сравнение результата (иммутабельность) (возможно я еще что-то не учел)

При этом библиотека может использовать те или иные типы в разных комбинациях или как-то частично. В рамках твиттера все это расписать, конечно, невозможно, приведу лишь список встретившихся мне СТМ (все они достаточно оригинальны): gist.github.com/artalar/e5e8a7…

Выше я вкратце, но на сколько возможно полно, описал то с чего СТМ начинается. Кажется, все уже достаточно не просто, а это лишь совсем поверхностная теория. Но давайте подведем какой-то итог.

Стейт-менеджер (СТМ) - это реактивная база данных.

Может быть не совсем прямолинейный вывод, но в рамках твиттера остановимся на этом 👀