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

Поделиться
HTML-код
  • Опубликовано: 11 янв 2025

Комментарии •

  • @def6141
    @def6141 2 года назад +3

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

  • @Multizauri
    @Multizauri 3 года назад +15

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

    • @mao3193
      @mao3193 3 года назад +3

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

    • @Multizauri
      @Multizauri 3 года назад +7

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

  • @h2w..
    @h2w.. Месяц назад +1

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

  • @VitVit312
    @VitVit312 3 года назад +6

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

    • @gamedevlavka
      @gamedevlavka  3 года назад +3

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

    • @VitVit312
      @VitVit312 3 года назад

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

  • @PavelStr-x5w
    @PavelStr-x5w 2 года назад +2

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

  • @nightkot4917
    @nightkot4917 5 месяцев назад +1

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

    • @gamedevlavka
      @gamedevlavka  5 месяцев назад

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

  • @limlife4035
    @limlife4035 3 года назад +8

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

    • @blackmercy-il9me
      @blackmercy-il9me 2 года назад +2

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

    • @blackmercy-il9me
      @blackmercy-il9me 2 года назад +1

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

  • @brickman3171
    @brickman3171 3 года назад +4

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

    • @gamedevlavka
      @gamedevlavka  3 года назад +1

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

  • @vovawait
    @vovawait 5 дней назад

    Медведя-телепата хотим!

  • @GameDev55
    @GameDev55 Год назад

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

  • @andrey_aka_skif
    @andrey_aka_skif 3 года назад +3

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

    • @gamedevlavka
      @gamedevlavka  3 года назад +3

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

    • @gamedevlavka
      @gamedevlavka  3 года назад +6

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

    • @andrey_aka_skif
      @andrey_aka_skif 3 года назад

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

  • @anton3757
    @anton3757 3 года назад +2

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

  • @evilvirraZzz
    @evilvirraZzz 3 года назад +2

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

  • @Timur-z4d
    @Timur-z4d 2 года назад +3

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

    • @orwell235
      @orwell235 Год назад +1

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

  • @янДек-х8п
    @янДек-х8п Год назад

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

  • @vladisslavss
    @vladisslavss 2 года назад +3

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

  • @ПолапановВладимир
    @ПолапановВладимир 2 года назад

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

  • @Degril
    @Degril 2 года назад +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.
    Что вы думаете на эту тему?

  • @kitws
    @kitws 3 года назад +1

    Спасибо

  • @mopnex8374
    @mopnex8374 3 года назад

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

    • @gamedevlavka
      @gamedevlavka  3 года назад +2

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

  • @ЭдуардКик
    @ЭдуардКик 3 года назад +3

    Подписка

  • @maxchannel4191
    @maxchannel4191 2 года назад +2

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

  • @def6141
    @def6141 3 года назад +4

    Лайк

    • @def6141
      @def6141 3 года назад

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

    • @def6141
      @def6141 3 года назад

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

    • @gamedevlavka
      @gamedevlavka  3 года назад

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

  • @cathello2900
    @cathello2900 2 года назад +1

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

  • @artemkorotkov9770
    @artemkorotkov9770 2 года назад

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

    • @gamedevlavka
      @gamedevlavka  2 года назад +2

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

  • @АндрейПрокофьев-е7д
    @АндрейПрокофьев-е7д 3 года назад +2

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

    • @gamedevlavka
      @gamedevlavka  3 года назад

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

    • @АндрейПрокофьев-е7д
      @АндрейПрокофьев-е7д 3 года назад

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

    • @gamedevlavka
      @gamedevlavka  3 года назад

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

    • @АндрейПрокофьев-е7д
      @АндрейПрокофьев-е7д 3 года назад

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

    • @andrey_aka_skif
      @andrey_aka_skif 3 года назад

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