TGViewer
10 минут до кода 10 минут до кода @ten_minutes_to_code · 228 subscribers
Post #28 148
Стейт-машина головного мозга

Программисты-новички мыслят скриптами: «сделай это, потом то, если получилось — делай третье». Это линейная логика функций, которая разваливается в ту же секунду, как только вы выходите за рамки учебной задачи. В реальном мире системы живут не инструкциями, а состояниями.

Инженерное мышление начинается там, где вы перестаете воспринимать код как список команд и начинаете видеть в нем сущности.

Сущность — это какой-то объект, который в каждый момент времени находится в конкретном «статусе». Возьмем обычную дверь с магнитным замком. Для джуна это функция openDoor(). Для инженера это сущность со стейтом CLOSED. Когда мы прикладываем карту, происходит событие (Event). Если карта валидна, событие меняет состояние сущности на OPEN.

🤔 Почему это критически важно? Потому что в сложной системе вам не нужно каждый раз проверять сотню условий и обкладываться костылями. Вы просто смотрите, в каком состоянии находится объект «здесь и сейчас». И в зависимости от этого разрешаете или запрещаете логику.

Фронтенд и кнопка-инвалид

Представьте, что у вас есть кнопка загрузки. Если вы мыслите инструкциями, вы напишете: «при клике отправь запрос». И поймаете один из классических багов, когда пользователь может нажать на кнопку 10 раз и отправит 10 запросов.

Инженер же, при клике, вешает на кнопку состояние loading: true. Как только стейт изменился, кнопка сама становится disabled. Ей плевать, сколько раз пользователь по ней ударит — её текущее состояние диктует поведение. Событие «ответ от API» переключит стейт обратно в loading: false, и кнопка «оживет».

Бэкэнд: Заказ не может телепортироваться

На бэкэнде логика состояний — это единственный способ не превратить код в непролазную лапшу из if-else. Вместо бесконечных проверок «а что сейчас с заказом?», мы жестко описываем его жизненный цикл.

Например:

1. Состояние: NEW -> Событие: «Оплата прошла» -> Состояние: PAID.
2. Состояние: PAID -> Событие: «Передано курьеру» -> Состояние: DELIVERING.

Вы физически не сможете перевести заказ в статус DELIVERING, если он находится в статусе NEW. Система просто не пропустит такое событие для этого состояния. Вместо гигантских простыней проверок у вас есть четкий switch-case или набор изолированных классов, которые отвечают за конкретные переходы.

Архитектурная чистота

Переключиться на стейт-ориентированное мышление больно, потому что запутанность кода на первый взгляд растет. Читать линейный скрипт проще, чем прыгать по состояниям. Но расширять такую систему — одно удовольствие. Если завтра бизнес придумает новый статус «Возвращено на склад», вы просто добавите один узел в стейт-машину и опишете один переход. Вам не придется перекапывать весь проект в поисках мест, где вы забыли поставить if.

💡 Кстати, профессиональные тестировщики часто рисуют «схемы состояний и переходов». Если вам повезло работать с таким, и у вас на руках есть такой документ, писать логику бэкэнда одно удовольствие. Вы просто переносите готовую карту в код.

Если что-то всё ещё звучит запутанно — пиши вопросы в комментах, я обязательно отвечу. А если всё разложилось по полочкам — ставь 🔥, так я пойму, что пост был полезен

10МДК
  • 🔥 9
  • ❤ 2
More from @ten_minutes_to_code
  1. May 28, 2026Первый сезон получился про путь “от пользователя к инженеру”. Именно эту картину мы весь с…
  2. May 28, 2026Когда я запускал этот канал, у меня была довольно простая идея: писать каждый день коротки…
  3. May 7, 2026Почему нормализация БД — это чистая логика, а не бюрократия На любом ongoing-проекте требо…
  4. May 3, 2026🤔 А где новые посты? Сори что вот так пропал без предупреждения, но я думал что справлюсь…
  5. Apr 29, 2026Почему HTTPS не спасет ваши секреты Замочек в адресной строке браузера — это мощное успоко…
  6. Apr 28, 2026Целостность данных против иллюзии атомарности Начинающий разработчик видит базу данных как…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →