TGViewer
Лавка Разработчика Лавка Разработчика @gamedevlavka · 3.87K subscribers
Post #994 2.82K
Продолжим разбор архитектурных вопросов

Дисклеймер:
Придется потерпеть скучные и местами рваные кусочки информации, потому что я решил собрать всё в кучу, но сделать это постепенно, отслеживая фидбек, чтобы не отойти в сторону. Потом это всё соберется в отдельную видео-лекцию. За вопросы всем заранее спасибо!

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

1. Существуют классы, которые знают КАК менять данные. Знают, потому что вы их написали, конечно. Их называют обработчики данных. На скринах можно увидеть пример обработки добавления предмета в инвентарь. Отдельный класс, он умеет только добавлять предмет в инвентарь и возвращать ответ, на этом всё. Это вынесенно намеренно в отдельный класс, чтобы в случае резкого изменения механики добавления просто выбросить этот класс и написать новый без поисков откуда ноги растут. Если при добавлении предмета что-то работает не так - знаем где искать.

2. Сервисы. Это прослойка, которую могут видеть практически все в проекте. Они в себе собирают обработчики данных и могут ими жонглировать, чтобы менять данные как нужно. В сервис инвентаря можно послать команду добавить предмет в инвентарь, убрать, а можно просто написать метод проверки: есть ли предмет в инвентаре. В хорошем исполнении монобехи не могут видеть сервисы, их видят вьюмодели, контроллеры и т.д. Но даже если видят почему-то, игра будет весьма стабильной, т.к. изменение данных происходит в одном месте, которое управляется из какого-либо сервиса.

На скринах показана связка, для чего нужен сервис и как он взаимодействует с данными (через посредника - обработчика данных). Это, наверное, базовая база. MVVM, MVP, MVC, независимо от выбранной базы архитектуры, связка сервис - обработчик данных останется прежней. Если упороться, можно и в ECS применять, но там это излишне, ECS немного по-другому работает,
  • 👍 31
  • ❤ 6
  • ⚡ 2
  • 🤓 2
More from @gamedevlavka
  1. Oct 5, 2026🔖Потихоньку пришло понимание, как действительно нужно работать с ИИ в разработке игр Поня…
  2. Oct 3, 2026Скриншот-суббота Vol. 200 Выжали две сотки 🔠 На этой неделе фокус был на конференции DevG…
  3. Oct 2, 2026🔖DevGamm Belgrade 2026. Итоги В общем, побывал я, наконец-то, на конференции, а на DevGam…
  4. Sep 26, 2026Скриншот-суббота Vol. 199 🔠 На этой неделе фокус был на статье. gamedeveloper не захотел…
  5. Sep 25, 2026🔖Пост про старость, олдскулы и все такое В сети крутится тренд, что-то вроде "назови 9 иг…
  6. Sep 23, 2026Про обещанную статью В общем, игнорят меня на сайте gamedeveloper.com, поэтому она вышла н…
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 →