Плюсы и минусы статических классов в C#. Разбираем на примерах в Unity

Sdílet
Vložit
  • čas přidán 28. 08. 2024
  • Поддержи канал, бро!
    paypal.me/game... - мир
    boosty.to/game... - рф
    И даже криптой (пока только Ethereum):
    0x7a53325D1C36Eea7BbE8C6a8D00f2a0efd580e77
    Каждый опытный программист заверит, статика - зло. Но так ли это на самом деле? И почему это зло? Может все-таки иногда статические классы, методы, поля и др. полезны? Давайте разберемся на примерах в Unity, каковы плюсы и минусы статики. Данный урок подойдет не только к разработчикам игр на Unity, но и для тех, кто просто программирует на C#.
    Кстати, лайки и донаты волшебным образом ускоряют процесс записи новых видео!
    __________
    Залетай в Таверну Разработчика в телеге, и делись своими траблами в Unity, вместе разбираться будем!
    t.me/gamedevta...
    Подписывайся на канал в телеге, или на твиттер, там я публикую коротенькие типсы и практики, которые помогут писать код лучше, понятнее и эффективнее:
    Telegram: t.me/gamedevlavka
    Twitter: / gamedevlavka
    Twitter (личный): / vavilichevgd

Komentáře • 53

  • @def6141
    @def6141 Před 2 lety +3

    Пересмотрел еще раз... Захотелось еще лайк поставить :) 👍 (особенно за сервис локатор)

  • @Multizauri
    @Multizauri Před 2 lety +15

    Разбери сервис-локатор поподробнее.

    • @mao3193
      @mao3193 Před 2 lety +3

      А чего разбирать? Обычный словарь, где ключ это тип.

    • @Multizauri
      @Multizauri Před 2 lety +7

      @@mao3193 попросили написать в комментариях, если хотим, чтобы разобрали. Вот я и написал, в чем проблема?

  • @VitVit312
    @VitVit312 Před 2 lety +6

    Ну минусы очень условные, скорее это просто особенности работы класса и просто условия использования
    Это как жаловаться на велосипед о том что он не может бетон возить
    Да, не стоит везде пихать статики, но это работает со всем кодом, где то нужно одно, где то другое
    Этот видос скорее просто разъясняет что и для чего нужно применять

    • @gamedevlavka
      @gamedevlavka  Před 2 lety +3

      Именно так, так и задумывалось, а название видео такое - по известным причинам. Но цель была показать, для каких случаев подходит и не подходит статика

    • @VitVit312
      @VitVit312 Před 2 lety

      @@gamedevlavka Всё понимается, видосик то надо продвигать с:

  • @user-we6si4mi3x
    @user-we6si4mi3x Před rokem +2

    Спасибо за урок!!

  • @nightkot4917
    @nightkot4917 Před měsícem +1

    Нуу... в статические классы (В НЕБОЛЬШИХ ПРОЕКТАХ) очень удобно пихать нужную в большинстве случаев Функциональцину. Ну например SaveLoad класса Сериализованного Сохранения Игрока. При условии, что использунтся один функционал. Ну например сохранения в Json. Или Загрузку уровней.

    • @gamedevlavka
      @gamedevlavka  Před měsícem

      @@nightkot4917 да, в маленьких проектах на 1-2 разработчика можно вообще что угодно делать)

  • @evilvirraZzz
    @evilvirraZzz Před 2 lety +2

    Спасибо за видос)

  • @limlife4035
    @limlife4035 Před 2 lety +8

    Привет. А будут ролики еще про архитектуру приложения ?. Или посоветуй пожалуйста материла по построении архитектуры игры (Кинги статьи). Связи UI и Game например. Заранее спасибо. Классный канал спасибо за ролики.

    • @blackmercy-il9me
      @blackmercy-il9me Před 2 lety +2

      Максим крюков рекомендую там есть разбор стримов

    • @blackmercy-il9me
      @blackmercy-il9me Před 2 lety +1

      Точнее разбор кода подписчиков, довольно не плохо, к синдикат тоже неплохой канал, а так читать, устроиться на работу в конце концов, это самый эффективный способ считается

  • @anton3757
    @anton3757 Před 2 lety +2

    разбор сервис локатора очень актуален

  • @user-ku1tu6bj7v
    @user-ku1tu6bj7v Před rokem

    спасибо за паттерн, очень полезно

  • @kitws
    @kitws Před 2 lety +1

    Спасибо

  • @Degril
    @Degril Před 2 lety +4

    Тема не раскрыта:
    Чем статик хуже singleton?
    Интересует ни очевидные:
    singleton может наследоваться и несколько реализаций singleton можно положить в массив, например для какого-то Inject.
    Но на моей опыте почти никогда не наследуется singleton от какой-то абстракции и интерфейса, все singleton независмые системы
    Если нужен instantiate или другое api unity, то нужен singleton наследуемый от MonoBehaviour.
    А например:
    static может работать в edit mode.
    static может работать в любой сцене.
    у static есть api которое вызывается в момент открытия проекта и update.
    Static даже пишется приятней: ServiceLocator вместо ServiceLocator.Instance
    Которые уже круто перекрывают singleton, хотя в одной компании мое решение тз забраковали за сервис в static, мол лучше бы написал singleton.
    Что вы думаете на эту тему?

  • @brickman3171
    @brickman3171 Před 2 lety +4

    Как ты относишься к статичным событиям?

    • @gamedevlavka
      @gamedevlavka  Před 2 lety +1

      Также, как и к статике в целом. Они должны быть на своем месте: сцена загружена, прошла секунда игрового времени, игру поставили на паузу или свернули - это можно делать статичными событиями. При чем некоторые из них в Unity уже реализованы в качестве внутренних методов, но масштаб ответственности приведенных примеров понятен. То есть об этих событиях может знать каждый. Но по умолчанию, этого не требуется, поэтому в 99.9% случаев события не статичны

  • @GameDev55
    @GameDev55 Před rokem

    Вот так бывает) смотрел мнение по статике, а залип на сервис локаторе)

  • @user-hq2wg8pg1l
    @user-hq2wg8pg1l Před 2 lety +3

    Подписка

  • @user-hk5le8nv7x
    @user-hk5le8nv7x Před 2 lety +3

    Привет! Спасибо за видео!
    Есть вопрос по статическим полям: заметил, что если в Unity в режиме Play значение статического поля изменяется, то эти изменения сохранятся во всем проекте и после выхода из режима Play (а не как обычно сбрасываются). Изменения сбрасываются, только если менять что-то в коде (напр. тупо добавить какую-нибудь строчку, даже не относящуюся к стат полю, причем не обязательно в скрипте со статичным полем). Не нашел объяснения почему так, кто-нибудь поможет, объяснит?)
    И еще вопрос - статические поля ведут себя точно так же в реальных игровых сессиях? (т.е. если игрок выйдет из игры, значение стат поля сохранится?). Если так, то получается статические поля нельзя использовать с объектами, которые изменяются во время игры?

    • @orwell235
      @orwell235 Před rokem +1

      Значение не сохранится. То что у тебя оно сохраняется между PlayModes у тебя наверняка стоит EnterPlayMode Options, чтобы Play быстрее включался. Именно эта опция сбрасывает всю статику, но занимает большее время

  • @vladisslavss
    @vladisslavss Před 2 lety +3

    Хороший и познавательный ролик ?

  • @andrey_aka_skif
    @andrey_aka_skif Před 2 lety +3

    В 0:18 ночи нужно спать, а не про сервис-локатор рассказывать XD А если серьёзно, то не получится ли такая же ситуация, как в мемасике со скейтбордистом? Я так понимаю, что использование сервис-локатора "в любом месте" приведет к той же самой проблеме, что и просто со статическими классами. Если вдруг "неизменный" сервис аналитики придется поменять, то его получение через локатор снова нужно будет вычищать ручками. У нас "в любом другом классе" переменная типа Penguin. Хоть с локатором, хоть без.

    • @gamedevlavka
      @gamedevlavka  Před 2 lety +3

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

    • @gamedevlavka
      @gamedevlavka  Před 2 lety +6

      А раньше не выходит записывать, у меня годовалая дочка, и пока она не уснёт, дома слишком шумно, кабинета своего пока нет)

    • @andrey_aka_skif
      @andrey_aka_skif Před 2 lety

      @@gamedevlavka столкнулся с тем, что ютуб жестко трет мои комментарии. Кажется, я у него в немилости :-D Теперь по делу (повторю комментарий). Возможно, мне не хватает опыта, чтобы понять твою мысль. Однако, замена конкретного типа на интерфейс влечет за собой другую проблему. Я так понимаю, речь о чем-то вроде GetServices(). Но мы таким образом делаем контракт класса неявным. Мы скрываем зависимости. Не приведет ли это к большим проблемам? Да, я снова про DI

  • @def6141
    @def6141 Před 2 lety +4

    Лайк

    • @def6141
      @def6141 Před 2 lety

      А можешь разобрать EventManager из Юнити примера FpsMicrogame. Он вроде не сложный совсем но чет не пойму как там с типами дело обстоит. Передают в конкретный тип пустой метод с параметром ,🙄

    • @def6141
      @def6141 Před 2 lety

      Там экшон, наверно идёт подписка как-то не явно

    • @gamedevlavka
      @gamedevlavka  Před 2 lety

      @@def6141 надо будет глянуть

  • @user-bb3ny6fd4g
    @user-bb3ny6fd4g Před 2 lety

    Ждём сервис-локатор.

  • @maxchannel4191
    @maxchannel4191 Před 2 lety +2

    Разбери пожалуйста сервис локатор!!
    Подписался, поставил лайк, на колокольчик кликнул!
    Оч жду!

  • @mopnex8374
    @mopnex8374 Před 2 lety

    Если уж начал про статику рассказывать, можно было про синглтон немного рассказать.

    • @gamedevlavka
      @gamedevlavka  Před 2 lety +2

      Видео о синглтоне есть на канале, но да, не упомянул, каюсь

  • @cathello2900
    @cathello2900 Před 2 lety +1

    Для начинающих практически ничего не понятно...,
    собственно и написано, что рассчитано на джунов.

  • @artemkorotkov9770
    @artemkorotkov9770 Před rokem

    Классное видео! но дружище не чарактер а кэрэктер)

    • @gamedevlavka
      @gamedevlavka  Před rokem +1

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

  • @user-it9mg3ge6p
    @user-it9mg3ge6p Před 2 lety +2

    во первых,лягушки не всегда зеленые🙂 и во вторых вопрос:
    что имелось в виду "видео для джунов"?Лично я полное дно,но мне понятно,что рассказываете и ,мало того,я итак все это знал.
    А логика сервис-локатора у вас в архитектуре проекта достаточно подробно разложена.Хотя если будет что то новое-всегда интересно.

    • @gamedevlavka
      @gamedevlavka  Před 2 lety

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

    • @user-it9mg3ge6p
      @user-it9mg3ge6p Před 2 lety

      @@gamedevlavka дайте совет подписчику🤨
      нужно создавать рандомно корабли(бриги,фрегаты и подобное). У каждого конкретного класса(например, у фрегата) один корабль имеет одни характеристики(скорость,кол-во пушек и т.д. ) другой фрегат другие.Какой паттерн использовать?Фабричный метод или Строитель?

    • @gamedevlavka
      @gamedevlavka  Před 2 lety

      @@user-it9mg3ge6p что мешает использовать Prefab Variant? Где уже создать экземпляры с нужными характеристиками.
      Нужно больше контекста, чтобы дать ответ правильнее

    • @user-it9mg3ge6p
      @user-it9mg3ge6p Před 2 lety

      @@gamedevlavka визуализация не важна.У меня корабли это кубики🤣.важно создание экземпляров классов,то есть программирование.

    • @andrey_aka_skif
      @andrey_aka_skif Před 2 lety

      @@user-it9mg3ge6p ты часом не пытаешься сделать игру по мотивам настолки из книжки Олега Орлова?XD