Skip to content

Instantly share code, notes, and snippets.

@nodkz
Created November 15, 2020 11:14
Show Gist options
  • Save nodkz/41a5ee356581503033bd05104f5048bf to your computer and use it in GitHub Desktop.
Save nodkz/41a5ee356581503033bd05104f5048bf to your computer and use it in GitHub Desktop.
Что такое Стейт Менеджер для вас?

Что такое Стейт Менеджер для вас?

Чтоб вы поняли мою точку зрения, мне придется зайти с далека, чтобы вас ввести в свой контекст. Буду говорить просто и квадратно, и можно зацепиться за любое предложение и опровергнуть его.

Так вот начнем с далека. Человек изобрел транзистор. Из них собрали регистры, логичейские гейты AND, OR, XOR и пошла поехала булевая логика. Еще чутка напряглись и собрали калькуляторы и компьютеры. Поняли, что считает эта штука быстрее человека, и надо туда засовывать всё больше и больше вычислительной логики.

В 50-ых минули времена инструкций и чистого ассемблера, придумали языки программирования высокого уровня, типа Fortran, который позволял людям быстрее писать программы. Завезли туда переменные (VARIABLES) и начали писать безумные алгоритмы вычисления.

Так активно писали, что где-то в 60х запарились и придумали функции (FUNCTIONS), чтоб изолировать/инкапсулировать куски логики и алгоритмов. Привет функциональному подходу из 60х.

В 70x годах в языке Simula появились принципы Объектно Ориентированного Программирования – наши любимые классы и инстансы (CLASS). Просто логика стала настолько активно расти, что пришлось ряд переменных и функции, которые их обслуживают, объединять и инкапсулировать в новую сущность – класс. Привет ООПшникам из 70х.

Где-то в 80-ых стали активно развиваться параллельные вычисления. Народ намучился с синхронизацией состояния. И появился паттерн Наблюдатель (Observable), который позволяет объекту получать оповещения об изменении состояния других объектов.

В 90х появился HTML. А чуть позже появился JavaScript (в 1995). Событие по знаковости, как в 50-ых появились языки программирования высокого уровня. Даешь странички с примитивной типографикой и гиперссылками!

Ах да, и большинство наших зрителей появились тоже в 90х. Привет вам всем огромный.

В нулевых появился Gmail (2004) – первый SPA (Single Page Application). Началась эра веб-клиентов с богатой логикой на своей стороне. Событие по знаковости, как в 60-ых появились функции. Даешь больше логики на клиенте!

В 10ых стали появлятся Angular, Ember, React и прочие. Событие по знаковости, как в 70-ых появились классы. Стока много кода и логики, надо все объединять, собирать и структурировать. Давай фреймворки в браузеры!

Ну и к 20 году мы с вами заговорили о Стейт Менеджерах. Событие по знаковости, как в 80-ых появились параллельные вычисления и паттерн Observable. Мы замучались синхронизировать состояние в разных частях приложения. Даешь синхронизацию, даешь Стейт Менеджеры!

Т.е. история развивается по спирали. Фронтендеры – это бэкендеры со сдвигом в 40-50 лет, которые смогли начать программировать только в 2000х годах.

Так что такое Стейт Менеджер? Все до банальности просто:

  • это одна или несколько переменных из 50х (например адресная строка в браузере)
  • набор функции из 60х, либо класс из 70х (например History API, которые позволяет менять адресную строку)
  • и паттерн Observable из 80х (например event handler window.onpopstate) Всё это взяли объединили и получили BrowserHistory (который используется к примеру в React Router) - примитивный стейт менеджер, который позволяет управлять браузерной строкой и подписываться на ее изменения.

Итак, джентельменский набор любого стейт менеджера это - набор переменных, набор функций для изменения этих переменных и какой-нибудь Observable, который позволяет вам подписаться на изменения этих самых переменных.

И всякие там истории предыдущих состояний, иммутабельность, реактивность, потоки, EventEmitter, декораторы, thunk'и, хождение по сети за данными – это все сахар, ну или разновидности имплементации стейт менеджеров.

Переменная + Функция + паттерн Observable = вот оно мое базовое определение Стейт Менеджера. Ну а сверху уже добавляются разный примочки под определенные задачи.

@Hydrock
Copy link

Hydrock commented Nov 9, 2021

Полностью с вами согласен. Мысль очень точная.

@Bogdan808
Copy link

Годный рассказ, спасибо

@mohnatus
Copy link

прекрасно)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment