Singleton Одиночка порождающие шаблоны проектирования. Patterns

Sdílet
Vložit
  • čas přidán 19. 09. 2020
  • Обязательно изучение для успешного собеседования, даже если уже не джун.
    Подписывайся в телеграм канал и качай презентацию
    Singleton - порождающий шаблон проектирования, гарантирующий, что в однопоточном приложении будет единственный экземпляр некоторого класса, и предоставляющий глобальную точку доступа к этому экземпляру.
    Порождающие паттерны проектирования - которые имеют дело с процессом создания объектов. Важны когда система зависит от композиции, а не от наследования.
    !!! Не используй Singleton (Одиночка) как глобальную переменную, это анти паттерн
    Презентация
    docs.google.com/presentation/...
    Код codesandbox.io/s/amazing-anto...
    Телеграмм канал t.me/webDevGromMaxChannel

Komentáře • 21

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

    Привет всем 😎
    Это видео получилось сухим, но я его разбавил несколькими мемасиками, так что будет весело 😅
    Приятного просмотра ✌️

    • @grommaks
      @grommaks  Před 3 lety

      @Макс Шмидт стрим, ого) стрим это интересная идея! Попробую спланировать стрим)
      Я вроде говорил о том, что буду публиковать посты во вкладке сообщество 🙄
      Сейчас есть ряд событий в моей жизни мешающий снимать уроки регулярно, пытаюсь решить этот вопрос, даже прибегая к радикальным подходам)

    • @SkyAndStarss
      @SkyAndStarss Před 3 lety +1

      @@grommaks удачи в решении вопросов) рад видеть новые видео на твоем канале, особенно по шаблонам!

    • @grommaks
      @grommaks  Před 3 lety +1

      @@SkyAndStarss спасибо за поддержку, мне эта тема близка и интересна, одна из "проблем" это mac OS, пытаюсь научиться на нем записывать видео...и найти время из-за остальных событий в моей жизни ;)

  • @yurii-liakhov
    @yurii-liakhov Před 3 lety +1

    Спасибо за видео)
    очень интересны видео о паттернах)

    • @grommaks
      @grommaks  Před 3 lety

      Спасибо за отзыв :)
      В JS сложнее обосновать некоторые из паттернов к которым я привык в PHP...но есть много паттернов которые ярко выражены в JS, так что думаю серия уроков будет интересная для всех (включая меня)

  • @vitaliiiashchuk1534
    @vitaliiiashchuk1534 Před 3 lety +4

    Привет! ;-)
    Такой вопрос. А можешь привести практические примеры использования этого паттерна в реальной разработке на JS? Для каких ситуаций его можно использовать?

    • @grommaks
      @grommaks  Před 3 lety +3

      Привет :)
      Redux store - singleton. Вот тут видно что store импортится с файла, это по синглтона 4ртого :)
      react-redux.js.org/introduction/quick-start
      Скажем так, за создание сторы отвечает только лишь этот файл...но теортетически ничто не запрещает создать второй раз store...но это уже другой файл, а значит другая точка доступа к синглтону
      Синглтон применяется для того, чтобы иметь только лишь один экземпляр объекта
      store при использовании в проекте redux
      eventBuss во Vue тоже будет экспортиться каждый из своего файла (через импорт любой сможет получить доступ)
      Из-за того, что в JS нет классов и типизации, для кадого синглтона не нужно городить свой класс и генерировать свою типизацию...
      Т.е. в JS если Вы создали класс или из существующего класса сделали новый объект и вернули его как export default, то это уже будет считаться синглтон...Объект должен хранить и менять свое состояние (или состояние своих композитов), если нет состояния, то это просто utils (набор функций помошников)
      Если вернули функцию конструктор или интерфесы или класс или библиотеку или utils, то это не синглтон...
      В Angular есть DI, по этому там практически невозможно найти singleton...даже хранилище передается через DI, а значит его можно подменить в отличии от примера выше с inport store from './store'.

    • @user-jl1jz5jv1g
      @user-jl1jz5jv1g Před 3 lety +1

      любой сервис в NG если запровайденый(provideIn: root) в рут модуль, является синглтоном.

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

      @@user-jl1jz5jv1g Типичная ошибка, нет это не так, такой объект будет shared object, а не singleton :)
      1) Я могу легко указать в компоненте, чтобы вместо FooService вернуть FooServiceFactory и там сделать new FooService уже с другими параметрами в конструкторе...т.е. у меня появится другой экземпляр того же сервиса.
      2) Далее, если у меня lazy loading модулей которые провайдят такие сервисы, то генерируется несколько IoC контейнеров в приложении даже на уровне модулей...и каждый будет иметь свой экземпляр того же сервиса...
      3) Не говоря уже о том, что повторный провайд того же сервиса на уровне компонента создает новый инстанс...(частный случай для того, что я описал под номером 1)
      Как можно увидеть, что гарантий нет, что будет создан всего один инстанс этого класса...в этом то и сила DI, всегда можно подменить сервис на другой. В этом то и сила stateless service...не важно каким инстансом пользуешься, результат один и тот же всегда :)

    • @user-kn3ut1sh2o
      @user-kn3ut1sh2o Před 2 lety +1

      @@grommaks Когда комментарий понятней чем видео )))

  • @user-san-chous
    @user-san-chous Před rokem

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

    • @grommaks
      @grommaks  Před rokem

      Сервис в своем базовом понимании, это класс в котором нет состояния, в ангуляре это не совсем так, и там часто есть rxjs subject
      В языках типа C# или PHP, на которых я писал код, сервисы провайдятся как синглтоны или шаред обджекты, то есть один раз.
      В ангуляре такой подход тоже хорошо работает и надежен.
      Учитывая что мы в Ангуляре всегда храним состояние в сервисах как обсерваблы, то есть изменение состояния сообщит абсолютно все, то если мы можем описать модель данных как один класс, то вполне он может быть синглтоном
      P.S. ngrx редюсер предоставляет доступ условно к синглтону, к состоянию которое в единственном экземпляре и глобально, синглтон в синглтоне...и вроде как работает :) делал я однажды чтобы redux хранить много разных состояний, получилось грамоздко, и уже не так красиво...

  • @RK-gm4pd
    @RK-gm4pd Před 3 lety +1

    Привет
    Скриншотер это плагин в браузере, или в сэндбокс? Не понял

    • @grommaks
      @grommaks  Před 3 lety +1

      joxi screenshot Когда делю скриншот то выделяю область для скриншота, работает в винде

    • @RK-gm4pd
      @RK-gm4pd Před 3 lety +1

      @@grommaks и стрелочки там? На Убунту нет?

    • @grommaks
      @grommaks  Před 3 lety

      @@RK-gm4pd На убунте не нашел пока достойной замены...
      Стрелочки там рисуются...вот думаю макбук про купить для того чтобы стрелочки можно было рисовать 🤣

    • @grommaks
      @grommaks  Před 3 lety

      @@RK-gm4pd Вроде есть на убунту тоже...попробую поставить и отпишусь о результатах

    • @RK-gm4pd
      @RK-gm4pd Před 3 lety +1

      @@grommaks 3к за стрелочки ))