JavaScript Паттерны. Шаблоны проектирования. 17 Примеров

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 พ.ย. 2024

ความคิดเห็น • 419

  • @VladilenMinin
    @VladilenMinin  5 ปีที่แล้ว +34

    Ребят, у кого выдает ошибку
    static list = {
    ^
    SyntaxError: Unexpected token =
    Обновите версию NodeJS до последней

    • @denisdavydoff7863
      @denisdavydoff7863 5 ปีที่แล้ว

      не работает на посл версии, браузер говорит я дебил, bad method definition

    • @user-ch76tcye4vvuu8
      @user-ch76tcye4vvuu8 5 ปีที่แล้ว +1

      @@denisdavydoff7863 В браузере и не должно работать.

    • @pavelgramenitsky925
      @pavelgramenitsky925 4 ปีที่แล้ว +1

      день убил, чтобы понять почему не работает, огромное спасибо за коммент

    • @fitnesshacker_
      @fitnesshacker_ 4 ปีที่แล้ว

      Спасибо, помогло!

    • @АндрейКрестовников-б5ы
      @АндрейКрестовников-б5ы 4 ปีที่แล้ว

      Тоже хотел спросить про этот момент: по спецификации ES6 через static определяются только методы, не свойства. Это новая спецификация или что? Явно не работает в стабильной ноде, зачем вы это используете?

  • @DmitryPupinin
    @DmitryPupinin 2 ปีที่แล้ว +17

    Есть несколько спорных моментов в понимании автором паттернов:
    1. Декоратор. Автор описал скорее порождающий паттерн, похожий на Прототип. Основная особенность декоратора - возможность навесить на объект несколько штук одновременно, при этом каждый из них будет расширять возможности базового класса. Например: на стандартный вывод лога в файл можно навесить декораторы отправляющий данные по почте, в телеграм, в слак. Причем повесить можно динамически в любой комбинации.
    2. Фасад. Описана скорее Фабрика. Пример фасада: вы берете некую библиотеку (например компрессия видео) в которой милион методов, параметров и т.п. Но вам это все не нужно, поэтому вы делаете фасад с одним методом compress(filename, format) и уже внутри настраиваете сжатие или даже выполняете его в несколько проходов.
    3. Flyweight. Здесь автор на верном пути, но пример не показывает самого главного - паттерн нужен для экономии памяти. Пример: нужно отобразить большой список автомобилей (объект Car) и рядом с каждой отобразить логотип. Логотип - это картинка, которая повторяется у разных объектов, но при этом занимает больше всего памяти. И вот картинку и нужно выделить из Car и хранить отдельно и уникально. Тогда отображая даже тысячу объектов нам возможно придется хранить только 1-2 картинки.
    4. Chain of Responsibility. Тут автор дал маху и описал Method chaining, ничего общего с заявленным паттерном не имеющий.
    5. Command. Похоже что автор вывернул шаблон на изнанку... :) т.к. обычно объект вызывает команду, а не команда объект. Смысл паттерна в том, чтобы унифицировать интерфейс команды и облегчить динамическое связывание объектов с разными командами. Например: ajax сохранение документа (как в Google Docs) можен происходить по нажатию на кнопку, по комбинации клавиш и по таймеру. Все эти элементы связываются с одной командой и вызывают ее метод execute. Таким образом алгоритм сохранения находится в одном месте - в команде. Но главное - нет никаких трудностей в присоединении этой же команды, например, к жесту мышью (gesture).
    6. State. Здесь автор не решил проблему, а наоборот ее создал. Представим себе большое количество состояний, которые еще и меняются в зависимости от роли пользователя. Метод change сразу превращается в жестокий набор десятков if и даже хуже. Так вот паттерн State как-раз и предназначен решить создаваемую автором проблему. А решает он ее тем, что как-раз state определяет какое состояние будет следующим! Т.е. именно GreenLight должен решать какой свет будет после него и менять состояние светофора. Кстати, обратите внимание, что у автора после зеленого сигнала включается красный, хотя должен быть желтый.
    7. Strategy. В целом автор все описал правильно, за исключение одного, однако же, принципиального момента: стратегия должна храниться внутри контекста (Commute). Здесь нужно понимать, что стратегия - это то, что выбирается и какое-то время используется в основном алгоритме. В нужно время стратегию можно изменить. Таким образом Commute как-раз и предназначен для того, чтобы вызвать стратегию, не упоминая ее саму (Commute.travel()). Тоесть в приложении будет всего несколько мест где стратегия будет выбираться или изменяться, во всех остальных (сотнях) мест мы вызываем ее опосредованно через контекст (Commute). И вот это как-раз и является целью данного паттерна.
    8. Template. Такой поведенческий паттерн мне не известен, однако известен "Template Method". В данной части автор рассматривает простое наследование классов, не имеющее к поведенческим паттернам никакого отношения.
    Автору спасибо за возможность вспомнить и повторно проанализировать цели использования паттернов! :)

    • @АндрейИльин-д6ж
      @АндрейИльин-д6ж ปีที่แล้ว +1

      откуда автору то это знать?

    • @ДмитрийМалюгин-ч6к
      @ДмитрийМалюгин-ч6к ปีที่แล้ว +1

      @@АндрейИльин-д6ж А зачем рассказывать многотысячной аудитории, если не знаешь, что рассказываешь или не уверен в том, что рассказываешь правильно?

    • @АндрейИльин-д6ж
      @АндрейИльин-д6ж ปีที่แล้ว +1

      как зачем? а рекламу тогда куда пихать?@@ДмитрийМалюгин-ч6к

    • @POEOneLove
      @POEOneLove 10 หลายเดือนก่อน

      Дай бог вам здоровья. Я думал я один идиот и не вдуплил почему фабрика и фасад в этом примере одно и тоже почти, темплейт просто обычное наследование и так далее. Только начинаю погружаться в особенности паттернов в js, трудно найти живые примеры. Вы в 1 комментарии объяснили часть вопросов, которые возникали в процессе видео. 👍

  • @VladilenMinin
    @VladilenMinin  5 ปีที่แล้ว +150

    Creational Design Patterns
    Constructor 4:57
    Factory 10:15
    Prototype 20:09
    Singleton 23:31
    Structural Design Patterns
    Adapter 29:09
    Decorator 35:40
    Façade 41:26
    Flyweight 50:39
    Proxy 57:15
    Behavioral Design Patterns
    Chain of Responsibility 1:03:13
    Command 1:06:58
    Iterator 1:11:58
    Mediator 1:18:24
    Observer 1:26:00
    State 1:36:15
    Strategy 1:43:40
    Template 1:47:30

    • @denisdavydoff7863
      @denisdavydoff7863 5 ปีที่แล้ว +24

      Ещё и тайминг сделал, вот ты машина

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว +28

      @@denisdavydoff7863 Думаю с ними удобно)

    • @user-ch76tcye4vvuu8
      @user-ch76tcye4vvuu8 5 ปีที่แล้ว +9

      Не понял в чем принципиальная разница между фабрикой и фасадом? И там и там создается и возвращается объект указанного типа (вместо класса).

    • @SomeoneInNet
      @SomeoneInNet 4 ปีที่แล้ว +1

      @@user-ch76tcye4vvuu8 в данном видео - никакой.Вместо паттерна фасад была реализована фабрика.

    • @ЕвгенийГаврилов-ю9о
      @ЕвгенийГаврилов-ю9о 4 ปีที่แล้ว

      Спасибо!!! Очень круто

  • @ДмитрийГришанов-ы4е
    @ДмитрийГришанов-ы4е 4 ปีที่แล้ว +11

    Обычно паттерны, это ты смотришь на статью и после нескольких строк кода отпадает желание читать.
    А изучить нужно)
    Здесь настолько очевидные примеры, написаные на es6, что инфа сама влетает в голову.
    Причем все подходы начинают казаться очевидными. Ловишь себя на мысле, что так логично делать.
    Правда, видео смотрел на 1.5 скорости, но это никак не минус)
    Спасибо!

  • @technical777
    @technical777 3 ปีที่แล้ว

    Паттерны по программированию Constructor, Factory, Prototype, Singleton, Adapter, Decorator, Façade, Flyweight, Proxy, Chain of Responsibility, Command, Iterator, Mediator, Observer, State, Strategy, Template.
    Для меня это взрыв мозга, их нужно выучить или просто знать об их существовании, есть вещи которые просто не укладываются в голове.
    Владилен Спасибо Тебе.

  • @rostyslav5334
    @rostyslav5334 5 ปีที่แล้ว +190

    Господи, СПАСИБО, Владилен!!!!
    Нету такого контента на ютубе!

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว +25

      Я считаю важным свещать более продвинутые, тем не менее базовые темы)

    • @NazarLesyuk
      @NazarLesyuk 5 ปีที่แล้ว +9

      @@VladilenMinin верно, продолжайте Владилен, я очень нуждался в объяснении патернов проектирования. Благодарю Вас!

    • @bitmainuser4028
      @bitmainuser4028 5 ปีที่แล้ว

      да пздц, жлобы одни.

    • @karodar
      @karodar 4 ปีที่แล้ว

      К книге Швец А. "Погружение в паттерны проектирования", отличное дополнение

    • @stanfarshtei1291
      @stanfarshtei1291 4 ปีที่แล้ว

      refactoringDOTguru ----> Тут ВСЁ есть!!!!!!!!!! НО конечно, не так как у Владилена.

  • @demidovmaxim1008
    @demidovmaxim1008 5 ปีที่แล้ว +157

    В топ видео. Один из лучших преподавателей на мой сугубо личный взгляд, на просторах рунета. Огромное спасибо.

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว +8

      Благодарю за такой отзыв.
      Дает понимание, что выбранный вектор корректен)

    • @TakemuraGoro
      @TakemuraGoro 3 ปีที่แล้ว +1

      У него куча ошибок, не надо такому следовать.

    • @igorkugaudo8212
      @igorkugaudo8212 3 ปีที่แล้ว

      @@TakemuraGoro например?

    • @TakemuraGoro
      @TakemuraGoro 3 ปีที่แล้ว +3

      @@igorkugaudo8212
      Другая логика. В слушателе, он сделал какой-то узконаправленный код, который не универсальный.
      Ниже ссылка на вики, можно сравнить (внизу es6).
      С синглтоном вообще ужасное объяснение, слышал звон, не знает где он. Синглтон нужен, приминительно к бд (как у него), что бы не создавать лишних подключений. Про это ни слова. И так во всем. Код у него работает, конечно. но шаблоны - это прежде всего понимание задачи которую он решает, грамотное применение для оптимизации, не дублирования и так далее.
      ru.wikipedia.org/wiki/%D0%9D%D0%B0%D0%B1%D0%BB%D1%8E%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

    • @quantum-t
      @quantum-t 3 ปีที่แล้ว

      zabut pro “runet” kak pro strawni son

  • @АлексейСурков-ю3н
    @АлексейСурков-ю3н 11 หลายเดือนก่อน

    Спасибо Владилен за твои титанические труды. Ты крут

  • @ПавелЗ-ь3п
    @ПавелЗ-ь3п 5 ปีที่แล้ว +7

    Видео от Владилена - это лучшей it контент на youtube! Спасибо!

  • @maximminchenko7633
    @maximminchenko7633 5 ปีที่แล้ว +4

    Владилен! Выражающаю огромную признательность за твой труд! Лучший!

  • @The14Some1
    @The14Some1 ปีที่แล้ว +1

    Chain of responsibility, показанный тут, на самом деле является паттерном под названием "Builder". "Chain of responsibility" сам по себе подразумевает, что у нас есть разные классы, совместно выполняющие какую-то сложную задачу, и реализован механизм передачи данных от одного класса к другому по мере обработки данных.

  • @seoonlyRU
    @seoonlyRU 2 ปีที่แล้ว +1

    чотко, спасибо))) с ходу жирный лайк от его величества кодера - СЕООНЛИ

  • @igor_cojocaru
    @igor_cojocaru 5 ปีที่แล้ว +143

    Понравилось как в твоём IDE автоматом выводит название переданных параметров в функции. Если кому интересно как так сделать в VS Code просто установите расширение JS Parameter Annotations.

    • @thisreal
      @thisreal 5 ปีที่แล้ว +13

      если нужно изменить цвет названия этих параметров под вашу тему:
      то просто в settings.json добавьте нужный цвет:
      "workbench.colorCustomizations": {
      "jsannotations.annotationForeground": "#697098"
      },

    • @РоманВоловик-з3д
      @РоманВоловик-з3д 4 ปีที่แล้ว

      Все делает за вас редактор. Не понимаю почему это вам так нравится?

    • @странствие
      @странствие 4 ปีที่แล้ว +12

      @@РоманВоловик-з3д а тебе больше нравится печатать, чем программировать?

    • @РоманВоловик-з3д
      @РоманВоловик-з3д 4 ปีที่แล้ว +1

      Больше нравится пользоватся нормальным редактором!

    • @странствие
      @странствие 4 ปีที่แล้ว +14

      @@РоманВоловик-з3д а нормальный это какой? Который не экономит твое время путем автокомплита?

  • @ДмитрийКаширин-о8п
    @ДмитрийКаширин-о8п 5 ปีที่แล้ว +2

    Отличные уроки на темы которые давно надо было осветить в таком ключе. Такой контент беспорно очень тяжело готовить и объяснять. Я бы только предложил во время объяснения чего-либо давать чуть больше реальных примеров из жизни, где это можно было бы применить, давай больше кейсов чтоли.
    Такая проблема у всех, кто объясняет JS - часто примеры оторваны от реальности, пока сам 40 раз не напишешь - не поймешь.
    Т.е. я смотрю к примеру про прокси, да это круто и волшебно, но как встроить в текущую работу - не очень понятно. Тоже с паттернами, давно хотел ознакомится с ними подробнее и из видео к сожалению не очень понял, как мне здесь и сейчас использовать некоторые из них. А так все видео - 5 баллов и это лучший контент, что я видел на данную тему. На днях куплю курс по Fullstack разработке. Большое спасибо и успехов!

    • @ДмитрийКаширин-о8п
      @ДмитрийКаширин-о8п 5 ปีที่แล้ว

      Было бы отлично увидеть паттерны для библиотек/фреймворков, начиная с Vue.js. Спасибо.

  • @davidbaghdasaryan2486
    @davidbaghdasaryan2486 5 ปีที่แล้ว +44

    Вы лучший. 💪
    Можно еще про Алгоритмы сортировки

  • @romanmelnichenko1365
    @romanmelnichenko1365 4 ปีที่แล้ว +1

    Такой объем информации лучше делить на части. Смотрел два дня ))
    Спасибо за труд!

  • @евгенийшевченко-э6ц
    @евгенийшевченко-э6ц 4 ปีที่แล้ว

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

  • @karfagen86
    @karfagen86 5 ปีที่แล้ว +5

    Эх, где ты был лет 6 назад, когда я этого ничего не понимал... :(
    Мне на фоне интересно было послушать, спасибо за видео!

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว +3

      6 лет назад активно работал и сам узнавал про все это)

    • @stanfarshtei1291
      @stanfarshtei1291 4 ปีที่แล้ว

      @@VladilenMinin то-есть надо 6 лет что бы стать профи? :)

    • @frizar999
      @frizar999 3 ปีที่แล้ว

      @@stanfarshtei1291 надо практика, а не время. важно сколько ты вкладываешь часов в свое дело, а не лет.

  • @Дагестанец-ч2х
    @Дагестанец-ч2х 5 ปีที่แล้ว +2

    Владилен, ты Бог Javascripta

  • @kirillgavrilov9681
    @kirillgavrilov9681 4 ปีที่แล้ว +5

    Как обычно, спасибо за видео)
    Но Chain of responsibility - это явно что-то другое. На мой взгляд, в этом видеоролике просто показан fluent API в классе MySum, основанный на method chaining

  • @olgaibragimova3913
    @olgaibragimova3913 5 ปีที่แล้ว

    Видео отличное! То, что нужно, для подготовки к собесу. Удивили комменты в стиле "а где точка с запятой?" "а не говорите нам 'господа'" - вы правда из видео только это смогли подчерпнуть?! а че не спрашиваете 'почему отступ в 2 пробела, а не 4' ?
    Владилен, терпения Вам и не терять мотивацию для создания нового контента.
    Ну, и 1000 лайков на 16000 просмотров - камон, ребята, вам лень нажать на "пальчик"? Будьте щедрее на лайки)))

  • @daniilukraine3611
    @daniilukraine3611 5 ปีที่แล้ว

    Думал смотреть долго , не буду ... Думал почитаю топ 10 паттернов и дело в шляпе , ну и примерчики посмотрю и все ... НО после первого паттерна я понял что нужно искать тетрадку и записывать все по его словам , потому что этот человек приводит жизненные примеры которые ну очень важны ! Удачи тебе Vladilen !

  • @serhiimaliuha69
    @serhiimaliuha69 3 ปีที่แล้ว +3

    Можете навести примеры шде и как можно использовать эти патерны в контексте разработки на React?

  • @nikolai4100
    @nikolai4100 4 ปีที่แล้ว +1

    СПАСИБО, Владилен!!!! Прям супер как вовремя, все что нужно! Всех благ тебе

  • @developer433
    @developer433 4 ปีที่แล้ว

    Отличное полезное видео, спасибо! (пара ремарок по английскому: vehicle - читается как "Виикл", light - свет, цвет будет color)

  • @madfish5605
    @madfish5605 5 ปีที่แล้ว +1

    ещё не досмотрел видос, не успел. Но материал усваивается и понимается весьма не сложно. Спасибо, на досуге досмотрю до конца обязательно

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว +1

      Обязательно досмотри)

  • @hub1347
    @hub1347 3 ปีที่แล้ว

    Эта тема настолько редкая, что заслуживает ЛайкШер даже без просмотра!

  • @dan.gorbunov
    @dan.gorbunov 5 ปีที่แล้ว +7

    Твоя продуктивность зашкаливает!)) Спасибо

  • @ilikecola378
    @ilikecola378 4 ปีที่แล้ว

    Совет всем кому трудно запускать простые скрипты js в консоли. Устанавливаем NodeJs, sublime text 3(размер инсталятора 10мб), ставим плагин для sublime который называется NodeJS(Preferences->Package Control->Package Install вводим NodeJs нажимаем инсталл) для удобного доступа к файлам можно использовать сайдбар(View -> Sidebar -> Show Sidebar) в который можно перетаскивать папки. Далее открываем из этого сайдбара нужный скрипт нажимаем ALT+R текущий файл скрипта запустится в консоли. Всем хорошего кодинга!

  • @ДмитрийС-ш9б
    @ДмитрийС-ш9б 4 ปีที่แล้ว +6

    Я то думал, что это просто способы решения каких-то задач, а их паттернами назвали?)
    Спасибо, было интересно!

    • @tuen8070
      @tuen8070 3 ปีที่แล้ว

      паттерны - это и есть способы решения каких-то задач.

  • @WebSP-q7e
    @WebSP-q7e 4 ปีที่แล้ว +5

    Спасибо за видео! Будет здорово, если на канале появится видео про утечки памяти, особенно про то, как их отследить)

  • @ЕгорШереметов-л4э
    @ЕгорШереметов-л4э 4 ปีที่แล้ว +17

    Это очень круто, но хотелось бы более реальные примеры использования этих паттернов.

    • @dimalukashenko4865
      @dimalukashenko4865 10 หลายเดือนก่อน

      Никто не знает с чем столкнется в реальности. Все примеры уникальные, по опыту скажу, что далеко не всегда реальный пример может помочь в дальнейшем. Среди проектов куча легаси и костылей. Так что такие примеры как бальзам на душу.

  • @egolege
    @egolege 3 ปีที่แล้ว

    Огромное спасибо! Одна из самых основных тем, на мой взгляд.

  • @СергійБереза-ъ7с
    @СергійБереза-ъ7с 5 ปีที่แล้ว +3

    спасибо за видео!
    14:50 - для чего указывать в 30 строчке ... || MemberFactory.list.simple , если до этого в 29 строчке для параметра type указали значение по умолчанию "simple"?

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว

      Если мы передадим строку, которой нет в фактори, например 'ffefs'. Тогда он не найдет и отдаст по умолчанию

    • @СергійБереза-ъ7с
      @СергійБереза-ъ7с 5 ปีที่แล้ว +7

      тогда, получается, в 29 строчке нет необходимости задавать значение type по умолчанию.

  • @lllltheollll
    @lllltheollll 5 ปีที่แล้ว +2

    спасибо огромное!!!
    давно ждал внятного разбора на эту тему

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว

      Приятного просмотра)

  • @musoverda
    @musoverda 5 ปีที่แล้ว

    Вы хорошо стартанули, Владилен. Если не остановитесь - через год Вы будете №1 на площадке TH-cam IT Russian )

  • @NikitaKazantsev1C
    @NikitaKazantsev1C 3 ปีที่แล้ว +1

    А может кто-нибудь объяснить разницу между Facade и Factory? Т.е. если мы в первый просто занесём тот список ссылок на классы, то по сути получится именно фабрика, которая собственно проще воспринимается и поддерживается, разве нет?

  • @gazdhikhartumov1159
    @gazdhikhartumov1159 4 ปีที่แล้ว

    Лучшее объяснение паттернов в рунете

  • @aleksey1965
    @aleksey1965 4 ปีที่แล้ว

    Владлен, у тебя талант! Смотрю только твои ролики, даже курс купил по Node JS)

  • @steel1004
    @steel1004 5 ปีที่แล้ว +2

    Очередной годный ролик под конспект. спасибо бро!

  • @vitaliksgaferg6252
    @vitaliksgaferg6252 4 ปีที่แล้ว +15

    Было бы очень интересно посмотреть в каком то реальном мини проекте или в процессе создании очередного велосипеда

    • @eugenenovikov671
      @eugenenovikov671 3 ปีที่แล้ว +1

      загугли fizz buzz enterprise edition

  • @alllligator
    @alllligator 2 ปีที่แล้ว

    Владилен, это нереально полезный урок для меня. Спасибо огромное!

  • @OstPVk
    @OstPVk 4 ปีที่แล้ว +1

    Все ок, Единственное, просьба или уменьшить шрифт кода, или в качестве резюме показать весь код

  • @johnbaretty9725
    @johnbaretty9725 2 ปีที่แล้ว

    Yo,Vladilen спасибо!

  • @ressbill
    @ressbill 4 ปีที่แล้ว +1

    Как всегда Топ. НО. В Фасаде разве мы можем получить доступ к массиву, который заполняем через метод add?

  • @eydeveloper
    @eydeveloper 4 ปีที่แล้ว

    Очень полезно для меня, как раз собирался изучить теорию по паттернам и затем практиковаться с одним проектом. Начал смотреть на другом канале, но проблема в том, что примеры слишком упрощённые и не понятно, где многие шаблоны вообще можно использовать. Спасибо за полезные видео.

    • @ИльяИваник-ф8ф
      @ИльяИваник-ф8ф 4 ปีที่แล้ว +2

      как новичок, могу сказать, что лично мне в данном видео тоже нихера не понятно, как это все может быть использовано в реальности.
      Зачем создавать 3 класса, а потом создавать 4й, который будет разруливать косяки первых трех, если ... можно было изначальн сделать просто 1 нормальный класс?))
      Зачем мутить какую-то дичь с observer, чтобы плюсануть циферку на 1?

  • @DzhigurdaAnton
    @DzhigurdaAnton 4 ปีที่แล้ว +2

    Судя по опыту цепочка обязанностей не так реализуется. Её цель отделить привязку отправителя запроса и его получателя. Проверьте пожалуйста.

  • @alenalel1267
    @alenalel1267 5 ปีที่แล้ว +2

    УУу что-то очень годное подъехало, в прочем как обычно :3

  • @РусланАскаров-ч4р
    @РусланАскаров-ч4р 3 ปีที่แล้ว +1

    Спасибо большое за видео.
    Планирую курс по vue у вас приобрести.

  • @StanislavKadyrov
    @StanislavKadyrov 3 ปีที่แล้ว

    Огромное спасибо за видео! Как всегда все четко, понятно и доступно! Удачи и успехов!

  • @СергейКазанцев-ю7ц
    @СергейКазанцев-ю7ц 3 ปีที่แล้ว

    Здравствуйте Владилен, в Singleton (25:30) относительно - "Database.instance = this", в developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes нашел нечто подобное, "Статические (class-side) свойства и свойства прототипа должны быть определены за рамками тела класса: Rectangle.staticWidth = 20;" Но это не то что у Вас. Подскажите пожалуйста, где найти материал на тему, создать поле (свойство) класса использую имя класса, например - Database.instance ? Спасибо.

  • @romanleliuk773
    @romanleliuk773 4 ปีที่แล้ว +1

    Очень вскользь, хотелось бы поподробней, с несколькими примерами. Либо хотя бы больше уточнений, например какие бывают декораторы, что декорировать можно не только класс. Но в целом очень круто, ничего подобного на русском не видел.

  • @АндрейБороздин-ф7ъ
    @АндрейБороздин-ф7ъ 5 ปีที่แล้ว +1

    Отличное видео! Такого подробного видео я не видел

  • @petrpozhoga2409
    @petrpozhoga2409 4 ปีที่แล้ว

    Добрый день, а почему на 43:14 вы создаете метод (reply) заглушку, может лучше в методе add обернуть вызов метода reply в конструкцию try/catch ?

  • @СергейЛомако-п8о
    @СергейЛомако-п8о 3 ปีที่แล้ว +1

    Во Flyweight еще нужно использовать ограничение кеша до определенного размера, иначе можно сделать memory leak.

  • @alexanderzhalyuk8590
    @alexanderzhalyuk8590 3 ปีที่แล้ว

    Прекрасная работа! Спасибо огромное за проделанный труд!

  • @wildemax
    @wildemax 2 ปีที่แล้ว +1

    Спасибо за видео, полезноно! Но все же ; лучше ставить в конце команд, меньше ошибок будет! Это как книгу писать без разделительных знаков!

  • @powpowpow666
    @powpowpow666 5 ปีที่แล้ว +1

    просто лучший 👍👍👍👍👍👍
    спасибо!)
    желаю обогнать Хауди Хо

  • @viktopxio3739
    @viktopxio3739 5 ปีที่แล้ว +1

    ТОП КОНТЕНТ!!! Благодарю!

  • @curtrade1
    @curtrade1 3 ปีที่แล้ว +2

    Владилен, спасибо за видео! Но шаблон Цепочка Обязанностей описан вами неверно. Цепочка обязанностей - это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи. refactoring.guru/ru/design-patterns/chain-of-responsibility

  • @saymurrmeow
    @saymurrmeow 4 ปีที่แล้ว +1

    Привет, спасибо за отличный видос, есть вопрос по паттерну фасад. Куда сохраняются все жалобы из переменной complaints в родительском классе? нужно делать геттер чтобы их получить?

  • @ИльяИваник-ф8ф
    @ИльяИваник-ф8ф 4 ปีที่แล้ว +1

    Примеры были бы гораздо более понятны, если бы ты не только по ходу написания кода давал комментарии, что происходит, но и в самом начале бы объяснял, что вообще мы хотим сделать.
    Потому что сейчас получается: я создам класс такой-то (зачем?), у него будет метод такой-то(зачем?) и он будет возвращать то-то (зачем?). И только в самом конце примера, человек начинает догадываться зачем все это делалось (вот теперь понятно для чего).
    И теперь сравни степень понимания, если бы ты сначала объяснил что конкретно мы будем делать, а потом: я создам класс такой-то (понятно для чего), у него будет метод такой-то (понятно для чего) и он будет возвращать то-то (понятно для чего).
    В том же chain of responsibility. Сказал бы: наша задача сделать так, чтобы была возможность делать так sum1.add(1).add(2).add(3), для этого мы создадим класс MySum у которого будет этот самый метод .add() ... А то получается, что "текст задачи" у тебя в самом конце примера, и пока ты показываешь и рассказываешь "решение" - не понятно самое главное: решение ЧЕГО?

  • @jocoders6560
    @jocoders6560 5 ปีที่แล้ว

    Красавелла Владилен! Спасибо огромнейшее)))

  • @nikolai4100
    @nikolai4100 4 ปีที่แล้ว

    Владилен здравсвуйте, подскажите пожалуйста, что бы посоветовали почитать по основам ООП в контексте JS. Я Сейчас как раз на стадии изучения классов и прототипов, далее в планах React. Спасибо

  • @serhiimaliuha69
    @serhiimaliuha69 3 ปีที่แล้ว

    В патерне Observer желательно так же в методе subscribe(observer) проверять, есть ли уже данный обсервер или использовать Map взамен массива для this.observers

  • @Realing29
    @Realing29 4 ปีที่แล้ว

    А почему этого видео нет в плейлисте про jscrit, чуть не пропустил интересную тему.

  • @ОлегВячеславович-с6е
    @ОлегВячеславович-с6е 5 ปีที่แล้ว +2

    Спасибо ! Вот только не понял точно чем отличаются на примере паттерн Фасада и Фабрики, наследование классов это и есть то что отличает фасад от фабрики?

    • @SomeoneInNet
      @SomeoneInNet 4 ปีที่แล้ว

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

  • @jacobadlerman3067
    @jacobadlerman3067 3 ปีที่แล้ว

    Владилен, а насколько часто на работе приходится ими пользоваться? Ты показал достаточно много паттернов, значит, ты ими пользовался в реальной разработке?

  • @igor_cojocaru
    @igor_cojocaru 5 ปีที่แล้ว +1

    Спасибо тебе. Очень нужная информация

  • @dustfellsans9705
    @dustfellsans9705 2 ปีที่แล้ว

    Владилен, спасибо огромное за данное видео, оно было очень полезно! Но у меня возник вопрос: является паттерн "модуль" в JS до сих пор актуальным? Ибо одни говорят о том, что ES6 решил эту проблему описанную в паттерне, другие говорят о том, что он до сих пор востребован. Хотелось услышать ваше мнение на этот счёт, заранее спасибо.

  • @alexeygumenyuk8510
    @alexeygumenyuk8510 4 ปีที่แล้ว

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

  • @ratnev
    @ratnev 4 ปีที่แล้ว

    ...только не "Вехикл", плиз, а так просто обалденное видео. Спасибо огромное за такой труд!

  • @NotTheLastOne
    @NotTheLastOne 2 ปีที่แล้ว

    26:40 чем отличается Database от this ? почему ты используешь название класса внутри конструктора вместо this ?

  • @xxxxPomaHxxxx
    @xxxxPomaHxxxx 5 ปีที่แล้ว +27

    Прототип не верная реализация, прототип это посути просто добовление методов клон к своим объектам и всё, не больше не меньше, смысл в том чтобы созданием клона занимался сам объект.
    Про фабрику можно было добавить, что когда мы в фабрике ставим новые свойства это уже патерн строитель, тое ваша реализация это комбинация 2х паттернов.
    Chain of Responsibility вообще не то, цепочка обязанностей это когда у нас классы с большой вложенностью, дочерний вызывает какой нибудь эрор, и все классы по цепочке вызывают эрор у себя и у родителя, и каждый на своем уровне что то делает, ну или не делает, а потом просто вызывает родительский super.error(...arg), то есть в этом патерне метод который цепочный обязательно должен быть у всех классов потомков, а то что вы показали это просто каррирование на классе.
    Паттерн команда, а описываете стратегию, команда это по сути просто небольшой рефакторинг когда мы класс "кнопка удаления" делаем просто "кнопка" более универсальная штука, с полем команда в которую засунули нашу функцию как поле класса, которая что то удаляет.
    В медиаторе нужно было добавить, что его смысл в том что юзеры друг с другом вообще не взаимодействуют у них нет никакого механизма общения и всё они делают через посредника, это основная его задача для наглядности обычно делают 3 класса разных чтобы было понятно, что 1 общается с 3 тока через 2. Это реально важно потому что этот паттерн реализуют обычно когда уже у нас зоопарк сущностный связанных друг с другом хз как и чтобы как то упорядочить делают всех связанными только с одним медиатором а он уже разруливает.
    Стратегия у вас это просто наследование хз я патерна не 1 из существующих не уловил.
    В целом интересно было посмотреть, и вообще пофиг как что называется главное это помнить сам паттерны а не названия, мне например знание названий тока на собесе помогло)

    • @ДмитрийНормов-ю6ц
      @ДмитрийНормов-ю6ц 4 ปีที่แล้ว +1

      Интересно, что скажет по поводу замечаний сам автор))))
      Че т он молчит.

    • @andreystarostin1350
      @andreystarostin1350 4 ปีที่แล้ว +1

      Патер приспособленец, неверно описан, суть его разделение состояния на характерное для текущего контекста использование и на базовое не изменяемое.

    • @maksimsergeevich5939
      @maksimsergeevich5939 4 ปีที่แล้ว

      Посоветуйте тогда информацию где паттерны правильнее описаны, желательно на js/ts. Пожалуйста

    • @rayman1780
      @rayman1780 3 ปีที่แล้ว

      Меня еще в реализации паттерна "состояние" смущеает, что светофор знает про все свои состояния и управляет логикой их переключения (например, если он в состоянии "желтый", он знает, что нужно переключиться в состояние "зеленый"). Я не уверен, возможно такие варианты исполнения тоже существуют, но тогда смысл от всех этих классов с состояниями? Они же призваны убрать логику из основного класса, а не просто хранить в себе кусочки кода.

  • @ReAgent003
    @ReAgent003 3 ปีที่แล้ว

    Очень крутое видео, часто сюда заглядываю чтобы освежить знания, спасибо!

  • @PlayMrGolem
    @PlayMrGolem 2 ปีที่แล้ว

    В шаблоне проектирования Адаптер не будет ли проще сделать NewCalc extends OldCalc, или это простой пример, и в реальности этого не применить?

  • @alexleshenko
    @alexleshenko 3 ปีที่แล้ว +1

    А тайп (type=“simple”) же есть по умолчанию, он если ничего не придёт и создаст simple инстанс и || избыточен)?

    • @kvaqich
      @kvaqich 3 ปีที่แล้ว

      А если придёт запрос на, к примеру, «advanced» подписку?

    • @ЭйЭй-ы1и
      @ЭйЭй-ы1и 3 ปีที่แล้ว

      @@kvaqich а если придет "абракадабра",?))) сначала нужно реализовать подписку, а потом ее юзать, Владилен просто не заметил видимо. (Поясняю, если подписка advanced то она будет simple, так почему сразу не поставить simple, а если нам нужна именно advanced подписка - мы ее реализуем, и тогда запись с примером || 'simple' опять не нужен). Как-то так))

  • @alexbuki
    @alexbuki 5 ปีที่แล้ว +1

    интересно посмотреть применяемые паттерны с vue js

  • @vana__f7570
    @vana__f7570 3 ปีที่แล้ว +1

    получается, что HOC из реакта это декоратор

  • @biovawan
    @biovawan 4 ปีที่แล้ว

    Спасибо за видео!
    В 14_observer можно добавить отписку. Позволит в ручную удалить подписчиков вместе с уничтожаемым классом/компонентой. В результате - чистая память (или без утечек памяти, aka memory leak) без бесхозных подписчиков.

  • @mineplay3945
    @mineplay3945 ปีที่แล้ว

    Почему в паттерне Constructor не сделать static create() ? Зачем создавать new MemberFactory ? )

  • @viktorzimmermann7813
    @viktorzimmermann7813 5 ปีที่แล้ว +2

    кстати было бы прикольно видео (там даже получилась бы серия видосов если многое охватывать) по алгоритмам и так же по юнит тестированию в частности Jest и Enzyme к примеру запилить... Народу понравилось бы точно

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว +2

      Будет такой материал

  • @maksimsergeevich5939
    @maksimsergeevich5939 4 ปีที่แล้ว

    И еще вопрос по данному видео, правильно я понимаю, что Синглтон в Джаваскрипте нафиг не нужен?

  • @antonkoniouchevsky5823
    @antonkoniouchevsky5823 5 ปีที่แล้ว +2

    А зачем в фасаде при каждой регистрации создавать новый объект Complaints с новым массивом?

    • @SomeoneInNet
      @SomeoneInNet 4 ปีที่แล้ว

      потому что реализовали фабрику, автор ошибся

  • @Yevhenii_wnd
    @Yevhenii_wnd 4 ปีที่แล้ว +1

    Огромное спасибо за такой плезный контент! ПРОСЬБА: запиши видео по Reflect.

  • @DanReksar
    @DanReksar 5 ปีที่แล้ว +10

    Спасибо) Желаю скорее набрать 10к)

  • @НектоНеизвестный-л5ч
    @НектоНеизвестный-л5ч 5 ปีที่แล้ว +1

    Это очень качественное и нужное видео. Спасибо

  • @SlavaCh
    @SlavaCh 5 ปีที่แล้ว +3

    О, как и заказывал, благодарствую!)

  • @dispeltr1183
    @dispeltr1183 5 ปีที่แล้ว +1

    Владилен, лучший!!!

  • @olegmaz3969
    @olegmaz3969 5 ปีที่แล้ว

    Еще бы хорошо:
    1) Abstract Factory или Factory Method, Builder (какой с них Factory с урока)
    2) Bridge, Composite
    3) Interpreter, Memento, Visitor
    Акаунт у вас на facebook или linkedin есть ?

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว

      Добавлю в другом ролике.
      Нет, все контакты под видео

  • @Shkur777
    @Shkur777 4 ปีที่แล้ว +2

    1:24:00 правильно произносить - Айгор :)
    На ускоренной не правильно можно услышать :)

  • @andreyzee
    @andreyzee 3 ปีที่แล้ว

    Спасибо за видео, в процессе возник вопрос, является ли пример с фасадом еще и фабрикой?

  • @aleksandrlepin248
    @aleksandrlepin248 3 ปีที่แล้ว +3

    Объяснение паттрена адаптер никак не проясняет момент "зачем". Другими словами зачем мне создавать новый класс что бы использовать старый класс? Какой от этого профит кроме оверкодинга с целью заюзать паттерн? Еще более другими словами - не раскрывается смысл и плюсы от создания адаптера. Еще совсем другими словами - ты вызываешь один и тот же метод .operations с одним и тем же интерфейсом на разных инстансах. В чем смысл? По мне так если есть некий новый класс с новым интерфейсом то он должен использовать класс Адаптер которые подгоняет интерфейс старого класса под новый. В примере этого нету.

  • @ОлексійШелудченко-к4о
    @ОлексійШелудченко-к4о 5 ปีที่แล้ว

    Владилен, скажи пожалуйста, а почему ты не ставишь точку с запятой в конце строки, я просто читал в интернете про то, что если проект большой, то в некоторых случаях, перенос строки JS не будет интерпретировать, как её окончание. Насколько это вероятно (правдоподобно)? И стоит ли над этим заморачиваться? Заранее большое спасибо

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว +1

      Без нее код чище. Ошибок быть не может, если писать код корректно

  • @yevgenylevin8381
    @yevgenylevin8381 3 ปีที่แล้ว

    Супер контент Владилен ;)

  • @o.voytyn
    @o.voytyn 5 ปีที่แล้ว +2

    Спасибо за твои видео, на ютубе много курсов по базовому ЖС а вот по такому продвинотуму намного меньше (если вообще есть), продолжай делать такие видосики) и еще по продвинотому ангуляру (практикум какой то), спасибою

    • @VladilenMinin
      @VladilenMinin  5 ปีที่แล้ว

      По ангуляру в ближайшее время будет еще пара материалов)

  • @serhiimaliuha69
    @serhiimaliuha69 3 ปีที่แล้ว

    __proto__ - не безопасный способ определения является ли инстанс наследником класса, так как он деприкейтет
    console.log(carWithOwner.__proto__ === car);
    лучше заменить на:
    console.log(Object.getPrototypeOf(carWithOwner) === car);

  • @maksimmaliauka3026
    @maksimmaliauka3026 3 ปีที่แล้ว

    Круто) Очередной лайк.

  • @An-cq6jx
    @An-cq6jx 3 ปีที่แล้ว

    Владилен, если не секрет где ты работаешь? Фрилансишь на апворке или в компании. B сколько ты зарабатываешь в месяц? Просто интересно))) И сколько лет ты уже в программировании? Хочу просто понять сколько нужно потратить лет чтобы иметь такой опыт и сколько можно зарабатывать в перспективе

  • @макогонденис
    @макогонденис ปีที่แล้ว

    Можете допомогти,а принцип open-close не нарушається патерном factory,ми ж порушимо незмінну класу при добавлении нового класа?