Тоже хотел спросить про этот момент: по спецификации ES6 через static определяются только методы, не свойства. Это новая спецификация или что? Явно не работает в стабильной ноде, зачем вы это используете?
@@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)
Паттерны по программированию Constructor, Factory, Prototype, Singleton, Adapter, Decorator, Façade, Flyweight, Proxy, Chain of Responsibility, Command, Iterator, Mediator, Observer, State, Strategy, Template. Для меня это взрыв мозга, их нужно выучить или просто знать об их существовании, есть вещи которые просто не укладываются в голове. Владилен Спасибо Тебе.
Обычно паттерны, это ты смотришь на статью и после нескольких строк кода отпадает желание читать. А изучить нужно) Здесь настолько очевидные примеры, написаные на es6, что инфа сама влетает в голову. Причем все подходы начинают казаться очевидными. Ловишь себя на мысле, что так логично делать. Правда, видео смотрел на 1.5 скорости, но это никак не минус) Спасибо!
Понравилось как в твоём IDE автоматом выводит название переданных параметров в функции. Если кому интересно как так сделать в VS Code просто установите расширение JS Parameter Annotations.
если нужно изменить цвет названия этих параметров под вашу тему: то просто в settings.json добавьте нужный цвет: "workbench.colorCustomizations": { "jsannotations.annotationForeground": "#697098" },
владилен часто в твоих видео встречаю "создаем что-то и оно будет стейтом...", вот хочется как-то по проще что ли, ну и было бы практичнее если бы ты разбирал на более живых примерах, в духе при работе в домом, но опять же на твой вкус и такие голые примеры тоже очень полезны, спасибо за контент)
Как обычно, спасибо за видео) Но Chain of responsibility - это явно что-то другое. На мой взгляд, в этом видеоролике просто показан fluent API в классе MySum, основанный на method chaining
Отличные уроки на темы которые давно надо было осветить в таком ключе. Такой контент беспорно очень тяжело готовить и объяснять. Я бы только предложил во время объяснения чего-либо давать чуть больше реальных примеров из жизни, где это можно было бы применить, давай больше кейсов чтоли. Такая проблема у всех, кто объясняет JS - часто примеры оторваны от реальности, пока сам 40 раз не напишешь - не поймешь. Т.е. я смотрю к примеру про прокси, да это круто и волшебно, но как встроить в текущую работу - не очень понятно. Тоже с паттернами, давно хотел ознакомится с ними подробнее и из видео к сожалению не очень понял, как мне здесь и сейчас использовать некоторые из них. А так все видео - 5 баллов и это лучший контент, что я видел на данную тему. На днях куплю курс по Fullstack разработке. Большое спасибо и успехов!
Chain of responsibility, показанный тут, на самом деле является паттерном под названием "Builder". "Chain of responsibility" сам по себе подразумевает, что у нас есть разные классы, совместно выполняющие какую-то сложную задачу, и реализован механизм передачи данных от одного класса к другому по мере обработки данных.
Видео отличное! То, что нужно, для подготовки к собесу. Удивили комменты в стиле "а где точка с запятой?" "а не говорите нам 'господа'" - вы правда из видео только это смогли подчерпнуть?! а че не спрашиваете 'почему отступ в 2 пробела, а не 4' ? Владилен, терпения Вам и не терять мотивацию для создания нового контента. Ну, и 1000 лайков на 16000 просмотров - камон, ребята, вам лень нажать на "пальчик"? Будьте щедрее на лайки)))
Никто не знает с чем столкнется в реальности. Все примеры уникальные, по опыту скажу, что далеко не всегда реальный пример может помочь в дальнейшем. Среди проектов куча легаси и костылей. Так что такие примеры как бальзам на душу.
Думал смотреть долго , не буду ... Думал почитаю топ 10 паттернов и дело в шляпе , ну и примерчики посмотрю и все ... НО после первого паттерна я понял что нужно искать тетрадку и записывать все по его словам , потому что этот человек приводит жизненные примеры которые ну очень важны ! Удачи тебе Vladilen !
Очень полезно для меня, как раз собирался изучить теорию по паттернам и затем практиковаться с одним проектом. Начал смотреть на другом канале, но проблема в том, что примеры слишком упрощённые и не понятно, где многие шаблоны вообще можно использовать. Спасибо за полезные видео.
как новичок, могу сказать, что лично мне в данном видео тоже нихера не понятно, как это все может быть использовано в реальности. Зачем создавать 3 класса, а потом создавать 4й, который будет разруливать косяки первых трех, если ... можно было изначальн сделать просто 1 нормальный класс?)) Зачем мутить какую-то дичь с observer, чтобы плюсануть циферку на 1?
Спасибо за твои видео, на ютубе много курсов по базовому ЖС а вот по такому продвинотуму намного меньше (если вообще есть), продолжай делать такие видосики) и еще по продвинотому ангуляру (практикум какой то), спасибою
спасибо за видео! 14:50 - для чего указывать в 30 строчке ... || MemberFactory.list.simple , если до этого в 29 строчке для параметра type указали значение по умолчанию "simple"?
кстати было бы прикольно видео (там даже получилась бы серия видосов если многое охватывать) по алгоритмам и так же по юнит тестированию в частности Jest и Enzyme к примеру запилить... Народу понравилось бы точно
Очень вскользь, хотелось бы поподробней, с несколькими примерами. Либо хотя бы больше уточнений, например какие бывают декораторы, что декорировать можно не только класс. Но в целом очень круто, ничего подобного на русском не видел.
Спасибо за видео! В 14_observer можно добавить отписку. Позволит в ручную удалить подписчиков вместе с уничтожаемым классом/компонентой. В результате - чистая память (или без утечек памяти, aka memory leak) без бесхозных подписчиков.
Ну как теория для собеседования сойдет, практический новичку будет нереально сложно понять где какой из этих паттернов использовать и как их использовать. Можно снять получасовое видео по самым наиболее популярным паттернам с использованием в разработке какого нибудь приложения. Вот идея для видео
попыталась в codesandbox воспроизвести пример с фабрикой, static list = {...} выдает ошибку - Support for the experimental syntax 'classProperties' isn't currently enabled.
Отлично, доступно и интересно. Хотелось бы услышать Ваше экспертное мнение по поводу PWA-приложений. Их роль, перспективы ну и по возможности примерчик. Спасибо.
Прототип не верная реализация, прототип это посути просто добовление методов клон к своим объектам и всё, не больше не меньше, смысл в том чтобы созданием клона занимался сам объект. Про фабрику можно было добавить, что когда мы в фабрике ставим новые свойства это уже патерн строитель, тое ваша реализация это комбинация 2х паттернов. Chain of Responsibility вообще не то, цепочка обязанностей это когда у нас классы с большой вложенностью, дочерний вызывает какой нибудь эрор, и все классы по цепочке вызывают эрор у себя и у родителя, и каждый на своем уровне что то делает, ну или не делает, а потом просто вызывает родительский super.error(...arg), то есть в этом патерне метод который цепочный обязательно должен быть у всех классов потомков, а то что вы показали это просто каррирование на классе. Паттерн команда, а описываете стратегию, команда это по сути просто небольшой рефакторинг когда мы класс "кнопка удаления" делаем просто "кнопка" более универсальная штука, с полем команда в которую засунули нашу функцию как поле класса, которая что то удаляет. В медиаторе нужно было добавить, что его смысл в том что юзеры друг с другом вообще не взаимодействуют у них нет никакого механизма общения и всё они делают через посредника, это основная его задача для наглядности обычно делают 3 класса разных чтобы было понятно, что 1 общается с 3 тока через 2. Это реально важно потому что этот паттерн реализуют обычно когда уже у нас зоопарк сущностный связанных друг с другом хз как и чтобы как то упорядочить делают всех связанными только с одним медиатором а он уже разруливает. Стратегия у вас это просто наследование хз я патерна не 1 из существующих не уловил. В целом интересно было посмотреть, и вообще пофиг как что называется главное это помнить сам паттерны а не названия, мне например знание названий тока на собесе помогло)
Меня еще в реализации паттерна "состояние" смущеает, что светофор знает про все свои состояния и управляет логикой их переключения (например, если он в состоянии "желтый", он знает, что нужно переключиться в состояние "зеленый"). Я не уверен, возможно такие варианты исполнения тоже существуют, но тогда смысл от всех этих классов с состояниями? Они же призваны убрать логику из основного класса, а не просто хранить в себе кусочки кода.
А может кто-нибудь объяснить разницу между Facade и Factory? Т.е. если мы в первый просто занесём тот список ссылок на классы, то по сути получится именно фабрика, которая собственно проще воспринимается и поддерживается, разве нет?
@@kvaqich а если придет "абракадабра",?))) сначала нужно реализовать подписку, а потом ее юзать, Владилен просто не заметил видимо. (Поясняю, если подписка advanced то она будет simple, так почему сразу не поставить simple, а если нам нужна именно advanced подписка - мы ее реализуем, и тогда запись с примером || 'simple' опять не нужен). Как-то так))
static list = { simple: SimpleMembership, standard: StandardMembership, premium: PremiumMembership } а почему у меня выдает ошибку Parsing error: Unexpected token =
Здравствуйте Владилен, в Singleton (25:30) относительно - "Database.instance = this", в developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes нашел нечто подобное, "Статические (class-side) свойства и свойства прототипа должны быть определены за рамками тела класса: Rectangle.staticWidth = 20;" Но это не то что у Вас. Подскажите пожалуйста, где найти материал на тему, создать поле (свойство) класса использую имя класса, например - Database.instance ? Спасибо.
В паттерне фабрика вроде же нельзя добавлять новые свойства как свойство "тип". Это вроде как будет похоже на билдер. Я не особо разбираюсь но я на такое переписал: class SimpleAccess { constructor(name) { this.name = name; this.cost = 50; } } class StandartAccess { constructor(name) { this.name = name; this.cost = 150; } } class PremiumAccess { constructor(name) { this.name = name; this.cost = 300; } } class MemberFactory { static #list = { 'simple': SimpleAccess, 'standart': StandartAccess, 'premium': PremiumAccess, }; userNumber = 0; create(name = `defaultUser${this.userNumber++}`, type = SimpleAccess) { switch (type) { case MemberFactory.#list.simple: return new SimpleAccess(name); case MemberFactory.#list.standart: return new StandartAccess(name); case MemberFactory.#list.premium: return new PremiumAccess(name); default: console.log('Sorry, we are out of types.'); } } } const factory = new MemberFactory(); const members = [ factory.create('User1', SimpleAccess), factory.create('User2', StandartAccess), factory.create('User3', PremiumAccess), ];
Прототип это что-то вроде этого: Когда мы можем делать кучу независимых копий уже существующего как бы дефолтного обьекта, что-бы потом при надобности просто менять поля его копий. class Motorcycle { constructor(color, weight) { this.color = color; this.weight = weight; } produce() { return new Motorcycle(this.color, this.weight); } } const prototypeMotorcycle = new Motorcycle('green', 180); const moto1 = prototypeMotorcycle.produce(); const moto2 = prototypeMotorcycle.produce(); const moto3 = prototypeMotorcycle.produce(); _________ Вот описание: The Prototype Pattern creates new objects, but rather than creating non-initialized objects it returns objects that are initialized with values it copied from a prototype - or sample - object. The Prototype pattern is also referred to as the Properties pattern. An example of where the Prototype pattern is useful is the initialization of business objects with values that match the default values in the database. The prototype object holds the default values that are copied over into a newly created business object. Classical languages rarely use the Prototype pattern, but JavaScript being a prototypal language uses this pattern in the construction of new objects and their prototypes.
Ребят, у кого выдает ошибку
static list = {
^
SyntaxError: Unexpected token =
Обновите версию NodeJS до последней
не работает на посл версии, браузер говорит я дебил, bad method definition
@@denisdavydoff7863 В браузере и не должно работать.
день убил, чтобы понять почему не работает, огромное спасибо за коммент
Спасибо, помогло!
Тоже хотел спросить про этот момент: по спецификации ES6 через static определяются только методы, не свойства. Это новая спецификация или что? Явно не работает в стабильной ноде, зачем вы это используете?
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 Думаю с ними удобно)
Не понял в чем принципиальная разница между фабрикой и фасадом? И там и там создается и возвращается объект указанного типа (вместо класса).
@@user-ch76tcye4vvuu8 в данном видео - никакой.Вместо паттерна фасад была реализована фабрика.
Спасибо!!! Очень круто
Господи, СПАСИБО, Владилен!!!!
Нету такого контента на ютубе!
Я считаю важным свещать более продвинутые, тем не менее базовые темы)
@@VladilenMinin верно, продолжайте Владилен, я очень нуждался в объяснении патернов проектирования. Благодарю Вас!
да пздц, жлобы одни.
К книге Швец А. "Погружение в паттерны проектирования", отличное дополнение
refactoringDOTguru ----> Тут ВСЁ есть!!!!!!!!!! НО конечно, не так как у Владилена.
В топ видео. Один из лучших преподавателей на мой сугубо личный взгляд, на просторах рунета. Огромное спасибо.
Благодарю за такой отзыв.
Дает понимание, что выбранный вектор корректен)
У него куча ошибок, не надо такому следовать.
@@TakemuraGoro например?
@@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)
zabut pro “runet” kak pro strawni son
Паттерны по программированию Constructor, Factory, Prototype, Singleton, Adapter, Decorator, Façade, Flyweight, Proxy, Chain of Responsibility, Command, Iterator, Mediator, Observer, State, Strategy, Template.
Для меня это взрыв мозга, их нужно выучить или просто знать об их существовании, есть вещи которые просто не укладываются в голове.
Владилен Спасибо Тебе.
Обычно паттерны, это ты смотришь на статью и после нескольких строк кода отпадает желание читать.
А изучить нужно)
Здесь настолько очевидные примеры, написаные на es6, что инфа сама влетает в голову.
Причем все подходы начинают казаться очевидными. Ловишь себя на мысле, что так логично делать.
Правда, видео смотрел на 1.5 скорости, но это никак не минус)
Спасибо!
Вы лучший. 💪
Можно еще про Алгоритмы сортировки
Такой объем информации лучше делить на части. Смотрел два дня ))
Спасибо за труд!
Владилен! Выражающаю огромную признательность за твой труд! Лучший!
Спасибо Владилен за твои титанические труды. Ты крут
Видео от Владилена - это лучшей it контент на youtube! Спасибо!
чотко, спасибо))) с ходу жирный лайк от его величества кодера - СЕООНЛИ
СПАСИБО, Владилен!!!! Прям супер как вовремя, все что нужно! Всех благ тебе
ещё не досмотрел видос, не успел. Но материал усваивается и понимается весьма не сложно. Спасибо, на досуге досмотрю до конца обязательно
Обязательно досмотри)
Понравилось как в твоём IDE автоматом выводит название переданных параметров в функции. Если кому интересно как так сделать в VS Code просто установите расширение JS Parameter Annotations.
если нужно изменить цвет названия этих параметров под вашу тему:
то просто в settings.json добавьте нужный цвет:
"workbench.colorCustomizations": {
"jsannotations.annotationForeground": "#697098"
},
Все делает за вас редактор. Не понимаю почему это вам так нравится?
@@РоманВоловик-з3д а тебе больше нравится печатать, чем программировать?
Больше нравится пользоватся нормальным редактором!
@@РоманВоловик-з3д а нормальный это какой? Который не экономит твое время путем автокомплита?
Эх, где ты был лет 6 назад, когда я этого ничего не понимал... :(
Мне на фоне интересно было послушать, спасибо за видео!
6 лет назад активно работал и сам узнавал про все это)
@@VladilenMinin то-есть надо 6 лет что бы стать профи? :)
@@stanfarshtei1291 надо практика, а не время. важно сколько ты вкладываешь часов в свое дело, а не лет.
Спасибо за видео! Будет здорово, если на канале появится видео про утечки памяти, особенно про то, как их отследить)
владилен часто в твоих видео встречаю "создаем что-то и оно будет стейтом...", вот хочется как-то по проще что ли, ну и было бы практичнее если бы ты разбирал на более живых примерах, в духе при работе в домом, но опять же на твой вкус и такие голые примеры тоже очень полезны, спасибо за контент)
Твоя продуктивность зашкаливает!)) Спасибо
Как обычно, спасибо за видео)
Но Chain of responsibility - это явно что-то другое. На мой взгляд, в этом видеоролике просто показан fluent API в классе MySum, основанный на method chaining
Отличные уроки на темы которые давно надо было осветить в таком ключе. Такой контент беспорно очень тяжело готовить и объяснять. Я бы только предложил во время объяснения чего-либо давать чуть больше реальных примеров из жизни, где это можно было бы применить, давай больше кейсов чтоли.
Такая проблема у всех, кто объясняет JS - часто примеры оторваны от реальности, пока сам 40 раз не напишешь - не поймешь.
Т.е. я смотрю к примеру про прокси, да это круто и волшебно, но как встроить в текущую работу - не очень понятно. Тоже с паттернами, давно хотел ознакомится с ними подробнее и из видео к сожалению не очень понял, как мне здесь и сейчас использовать некоторые из них. А так все видео - 5 баллов и это лучший контент, что я видел на данную тему. На днях куплю курс по Fullstack разработке. Большое спасибо и успехов!
Было бы отлично увидеть паттерны для библиотек/фреймворков, начиная с Vue.js. Спасибо.
спасибо огромное!!!
давно ждал внятного разбора на эту тему
Приятного просмотра)
Chain of responsibility, показанный тут, на самом деле является паттерном под названием "Builder". "Chain of responsibility" сам по себе подразумевает, что у нас есть разные классы, совместно выполняющие какую-то сложную задачу, и реализован механизм передачи данных от одного класса к другому по мере обработки данных.
Я то думал, что это просто способы решения каких-то задач, а их паттернами назвали?)
Спасибо, было интересно!
паттерны - это и есть способы решения каких-то задач.
УУу что-то очень годное подъехало, в прочем как обычно :3
Владлен, у тебя талант! Смотрю только твои ролики, даже курс купил по Node JS)
Очередной годный ролик под конспект. спасибо бро!
Видео отличное! То, что нужно, для подготовки к собесу. Удивили комменты в стиле "а где точка с запятой?" "а не говорите нам 'господа'" - вы правда из видео только это смогли подчерпнуть?! а че не спрашиваете 'почему отступ в 2 пробела, а не 4' ?
Владилен, терпения Вам и не терять мотивацию для создания нового контента.
Ну, и 1000 лайков на 16000 просмотров - камон, ребята, вам лень нажать на "пальчик"? Будьте щедрее на лайки)))
Владилен, ты Бог Javascripta
Отличное полезное видео, спасибо! (пара ремарок по английскому: vehicle - читается как "Виикл", light - свет, цвет будет color)
Огромное спасибо! Одна из самых основных тем, на мой взгляд.
Отличное видео! Такого подробного видео я не видел
Это очень круто, но хотелось бы более реальные примеры использования этих паттернов.
Никто не знает с чем столкнется в реальности. Все примеры уникальные, по опыту скажу, что далеко не всегда реальный пример может помочь в дальнейшем. Среди проектов куча легаси и костылей. Так что такие примеры как бальзам на душу.
Владилен, это нереально полезный урок для меня. Спасибо огромное!
Огромное спасибо за видео! Как всегда все четко, понятно и доступно! Удачи и успехов!
Думал смотреть долго , не буду ... Думал почитаю топ 10 паттернов и дело в шляпе , ну и примерчики посмотрю и все ... НО после первого паттерна я понял что нужно искать тетрадку и записывать все по его словам , потому что этот человек приводит жизненные примеры которые ну очень важны ! Удачи тебе Vladilen !
Прекрасная работа! Спасибо огромное за проделанный труд!
Во Flyweight еще нужно использовать ограничение кеша до определенного размера, иначе можно сделать memory leak.
Очень полезно для меня, как раз собирался изучить теорию по паттернам и затем практиковаться с одним проектом. Начал смотреть на другом канале, но проблема в том, что примеры слишком упрощённые и не понятно, где многие шаблоны вообще можно использовать. Спасибо за полезные видео.
как новичок, могу сказать, что лично мне в данном видео тоже нихера не понятно, как это все может быть использовано в реальности.
Зачем создавать 3 класса, а потом создавать 4й, который будет разруливать косяки первых трех, если ... можно было изначальн сделать просто 1 нормальный класс?))
Зачем мутить какую-то дичь с observer, чтобы плюсануть циферку на 1?
Вы хорошо стартанули, Владилен. Если не остановитесь - через год Вы будете №1 на площадке RUclips IT Russian )
Yo,Vladilen спасибо!
Эта тема настолько редкая, что заслуживает ЛайкШер даже без просмотра!
Спасибо за твои видео, на ютубе много курсов по базовому ЖС а вот по такому продвинотуму намного меньше (если вообще есть), продолжай делать такие видосики) и еще по продвинотому ангуляру (практикум какой то), спасибою
По ангуляру в ближайшее время будет еще пара материалов)
Супер контент Владилен ;)
Красавелла Владилен! Спасибо огромнейшее)))
ТОП КОНТЕНТ!!! Благодарю!
Очень крутое видео, часто сюда заглядываю чтобы освежить знания, спасибо!
Огромное спасибо за такой плезный контент! ПРОСЬБА: запиши видео по Reflect.
спасибо за видео!
14:50 - для чего указывать в 30 строчке ... || MemberFactory.list.simple , если до этого в 29 строчке для параметра type указали значение по умолчанию "simple"?
Если мы передадим строку, которой нет в фактори, например 'ffefs'. Тогда он не найдет и отдаст по умолчанию
тогда, получается, в 29 строчке нет необходимости задавать значение type по умолчанию.
Спасибо) Желаю скорее набрать 10к)
набрал)
кстати было бы прикольно видео (там даже получилась бы серия видосов если многое охватывать) по алгоритмам и так же по юнит тестированию в частности Jest и Enzyme к примеру запилить... Народу понравилось бы точно
Будет такой материал
то что мне так не хватало, спасибо
Спасибо тебе. Очень нужная информация
Очень вскользь, хотелось бы поподробней, с несколькими примерами. Либо хотя бы больше уточнений, например какие бывают декораторы, что декорировать можно не только класс. Но в целом очень круто, ничего подобного на русском не видел.
Было бы очень интересно посмотреть в каком то реальном мини проекте или в процессе создании очередного велосипеда
загугли fizz buzz enterprise edition
Спасибо большое за видео.
Планирую курс по vue у вас приобрести.
просто лучший 👍👍👍👍👍👍
спасибо!)
желаю обогнать Хауди Хо
Это очень качественное и нужное видео. Спасибо
Владилен, лучший!!!
Спасибо за видео!
В 14_observer можно добавить отписку. Позволит в ручную удалить подписчиков вместе с уничтожаемым классом/компонентой. В результате - чистая память (или без утечек памяти, aka memory leak) без бесхозных подписчиков.
Круто) Очередной лайк.
Все ок, Единственное, просьба или уменьшить шрифт кода, или в качестве резюме показать весь код
Спасибо, круто, супер, продолжай в то же духе. 👍
Ну как теория для собеседования сойдет, практический новичку будет нереально сложно понять где какой из этих паттернов использовать и как их использовать. Можно снять получасовое видео по самым наиболее популярным паттернам с использованием в разработке какого нибудь приложения. Вот идея для видео
попыталась в codesandbox воспроизвести пример с фабрикой, static list = {...} выдает ошибку - Support for the experimental syntax 'classProperties' isn't currently enabled.
Лучшее объяснение паттернов в рунете
Спасибо за видео, полезноно! Но все же ; лучше ставить в конце команд, меньше ошибок будет! Это как книгу писать без разделительных знаков!
Интересно, спасибо за инфу!
Спасибо за полезные видео!)
Спасибо тебе Владилен
Владилен, спасибо за видео!
Интересно было бы про паттерны в React и Express (если таковые есть)
Отлично, доступно и интересно. Хотелось бы услышать Ваше экспертное мнение по поводу PWA-приложений. Их роль, перспективы ну и по возможности примерчик. Спасибо.
Тему PWA буду отдельно освещать. Они сыроваты еще для полноценного использования из-за разных платформ и бразуеров
очень здорово!!!!Однозначно лайк и подписка!
Ну тут жирный лайк, очень хорошая работа!
Благодарю)
на тайминге 14:44 вообще какой - то странный подход...тогда зачем параметр по умолчанию принимать в create ??
Тоже не понял)
А, вон там ниже чувак правильно написал. Типа можно тип передать что попало (например, "bruh"), и тогда надо фолбек как раз делать
@@ВладимирТайдонов-я6л Хмм...ок
получается, что HOC из реакта это декоратор
Круто! Еще бы такой же урок по ООП в js es6 на примерах
Есть ролик на канале
Спасибо! Отличное видео
...только не "Вехикл", плиз, а так просто обалденное видео. Спасибо огромное за такой труд!
Круто Владилен
материал просто супер, на вес золота, спасибо за работу! по BDD видео не планируется? на ютубе совсем по этой теме ничего нет, да и в рунете тоже.
15:20, 30 строка. Зачем нужен || MemberFactory.list.simple, если в параметрах и так передаётся этот тип по умолчанию?
Очень интересное видео! Спасибо! А composite pattern будет рассмотрен?
Bridge, тоже интересно посмотреть
Прототип не верная реализация, прототип это посути просто добовление методов клон к своим объектам и всё, не больше не меньше, смысл в том чтобы созданием клона занимался сам объект.
Про фабрику можно было добавить, что когда мы в фабрике ставим новые свойства это уже патерн строитель, тое ваша реализация это комбинация 2х паттернов.
Chain of Responsibility вообще не то, цепочка обязанностей это когда у нас классы с большой вложенностью, дочерний вызывает какой нибудь эрор, и все классы по цепочке вызывают эрор у себя и у родителя, и каждый на своем уровне что то делает, ну или не делает, а потом просто вызывает родительский super.error(...arg), то есть в этом патерне метод который цепочный обязательно должен быть у всех классов потомков, а то что вы показали это просто каррирование на классе.
Паттерн команда, а описываете стратегию, команда это по сути просто небольшой рефакторинг когда мы класс "кнопка удаления" делаем просто "кнопка" более универсальная штука, с полем команда в которую засунули нашу функцию как поле класса, которая что то удаляет.
В медиаторе нужно было добавить, что его смысл в том что юзеры друг с другом вообще не взаимодействуют у них нет никакого механизма общения и всё они делают через посредника, это основная его задача для наглядности обычно делают 3 класса разных чтобы было понятно, что 1 общается с 3 тока через 2. Это реально важно потому что этот паттерн реализуют обычно когда уже у нас зоопарк сущностный связанных друг с другом хз как и чтобы как то упорядочить делают всех связанными только с одним медиатором а он уже разруливает.
Стратегия у вас это просто наследование хз я патерна не 1 из существующих не уловил.
В целом интересно было посмотреть, и вообще пофиг как что называется главное это помнить сам паттерны а не названия, мне например знание названий тока на собесе помогло)
Интересно, что скажет по поводу замечаний сам автор))))
Че т он молчит.
Патер приспособленец, неверно описан, суть его разделение состояния на характерное для текущего контекста использование и на базовое не изменяемое.
Посоветуйте тогда информацию где паттерны правильнее описаны, желательно на js/ts. Пожалуйста
Меня еще в реализации паттерна "состояние" смущеает, что светофор знает про все свои состояния и управляет логикой их переключения (например, если он в состоянии "желтый", он знает, что нужно переключиться в состояние "зеленый"). Я не уверен, возможно такие варианты исполнения тоже существуют, но тогда смысл от всех этих классов с состояниями? Они же призваны убрать логику из основного класса, а не просто хранить в себе кусочки кода.
А может кто-нибудь объяснить разницу между Facade и Factory? Т.е. если мы в первый просто занесём тот список ссылок на классы, то по сути получится именно фабрика, которая собственно проще воспринимается и поддерживается, разве нет?
А тайп (type=“simple”) же есть по умолчанию, он если ничего не придёт и создаст simple инстанс и || избыточен)?
А если придёт запрос на, к примеру, «advanced» подписку?
@@kvaqich а если придет "абракадабра",?))) сначала нужно реализовать подписку, а потом ее юзать, Владилен просто не заметил видимо. (Поясняю, если подписка advanced то она будет simple, так почему сразу не поставить simple, а если нам нужна именно advanced подписка - мы ее реализуем, и тогда запись с примером || 'simple' опять не нужен). Как-то так))
Можете допомогти,а принцип open-close не нарушається патерном factory,ми ж порушимо незмінну класу при добавлении нового класа?
В шаблоне проектирования Адаптер не будет ли проще сделать NewCalc extends OldCalc, или это простой пример, и в реальности этого не применить?
26:40 чем отличается Database от this ? почему ты используешь название класса внутри конструктора вместо this ?
Добрый день, а почему на 43:14 вы создаете метод (reply) заглушку, может лучше в методе add обернуть вызов метода reply в конструкцию try/catch ?
static list = {
simple: SimpleMembership,
standard: StandardMembership,
premium: PremiumMembership
} а почему у меня выдает ошибку Parsing error: Unexpected token =
Как всегда Топ. НО. В Фасаде разве мы можем получить доступ к массиву, который заполняем через метод add?
23:28 созданный дополнительный параметр не определяется , то есть wheel пишет не определен
спасибо большое за уроки
Большое спасибо!!!
интересно посмотреть применяемые паттерны с vue js
Спасибо за видео, очень полезно
Здравствуйте Владилен, в Singleton (25:30) относительно - "Database.instance = this", в developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes нашел нечто подобное, "Статические (class-side) свойства и свойства прототипа должны быть определены за рамками тела класса: Rectangle.staticWidth = 20;" Но это не то что у Вас. Подскажите пожалуйста, где найти материал на тему, создать поле (свойство) класса использую имя класса, например - Database.instance ? Спасибо.
1:24:00 правильно произносить - Айгор :)
На ускоренной не правильно можно услышать :)
В паттерне фабрика вроде же нельзя добавлять новые свойства как свойство "тип". Это вроде как будет похоже на билдер.
Я не особо разбираюсь но я на такое переписал:
class SimpleAccess {
constructor(name) {
this.name = name;
this.cost = 50;
}
}
class StandartAccess {
constructor(name) {
this.name = name;
this.cost = 150;
}
}
class PremiumAccess {
constructor(name) {
this.name = name;
this.cost = 300;
}
}
class MemberFactory {
static #list = {
'simple': SimpleAccess,
'standart': StandartAccess,
'premium': PremiumAccess,
};
userNumber = 0;
create(name = `defaultUser${this.userNumber++}`, type = SimpleAccess) {
switch (type) {
case MemberFactory.#list.simple:
return new SimpleAccess(name);
case MemberFactory.#list.standart:
return new StandartAccess(name);
case MemberFactory.#list.premium:
return new PremiumAccess(name);
default:
console.log('Sorry, we are out of types.');
}
}
}
const factory = new MemberFactory();
const members = [
factory.create('User1', SimpleAccess),
factory.create('User2', StandartAccess),
factory.create('User3', PremiumAccess),
];
Прототип это что-то вроде этого:
Когда мы можем делать кучу независимых копий уже существующего как бы дефолтного обьекта, что-бы потом при надобности просто менять поля его копий.
class Motorcycle {
constructor(color, weight) {
this.color = color;
this.weight = weight;
}
produce() {
return new Motorcycle(this.color, this.weight);
}
}
const prototypeMotorcycle = new Motorcycle('green', 180);
const moto1 = prototypeMotorcycle.produce();
const moto2 = prototypeMotorcycle.produce();
const moto3 = prototypeMotorcycle.produce();
_________
Вот описание:
The Prototype Pattern creates new objects, but rather than creating non-initialized objects it returns objects that are initialized with values it copied from a prototype - or sample - object. The Prototype pattern is also referred to as the Properties pattern. An example of where the Prototype pattern is useful is the initialization of business objects with values that match the default values in the database. The prototype object holds the default values that are copied over into a newly created business object. Classical languages rarely use the Prototype pattern, but JavaScript being a prototypal language uses this pattern in the construction of new objects and their prototypes.
Singleton:
// The first way
// class Database {
// constructor(name, password) {
// this.name = name;
// this.password = password;
// if (!Database.instance) {
// Database.instance = this;
// }
// return Database.instance;
// }
// getAccess() {
// return (this.name === 'Valentino Rossi' ?
// `${this.name} ${this.password}` :
// 'Sorry you are not admin');
// }
// }
// =============================================================================
// The second way
class Database {
constructor(name, password) {
this.name = name;
this.password = password;
if (Database.instance) {
return Database.instance;
}
Database.instance = this;
}
getAccess() {
return (this.name === 'Valentino Rossi' ?
`${this.name} ${this.password}` :
'Sorry you are not admin');
}
}
const db1 = new Database('Valentino Rossi', '987654321');
const db2 = new Database('John Doe', '1234567890');
// console.log(db1 === db2);
// console.log(db1.getAccess());
Builder:
class Computer {
constructor() {
this.case = 'Full tover';
this.ram = 'kingston';
this.psu = 'seasonic',
this.graphics = 'rx580';
this.motherboard = 'asrock z390 extreme4';
this.cpu = 'i7 8700';
}
}
class ComputerBuilder {
constructor() {
this.computer = new Computer();
}
addCooler(cooler) {
this.computer.cooler = cooler;
return this;
}
addSsd(ssd) {
this.computer.ssd = ssd;
return this;
}
updateCase(updatedCase) {
this.computer.case = updatedCase;
return this;
}
updateRam(updatedRam) {
this.computer.ram = updatedRam;
return this;
}
updatePsu(updatedPsu) {
this.computer.psu = updatedPsu;
return this;
}
updateGraphics(updatedGraphics) {
this.computer.graphics = updatedGraphics;
return this;
}
updateMotherboard(updatedMotherboard) {
this.computer.motherboard = updatedMotherboard;
return this;
}
updateCpu(updatedCpu) {
this.computer.cpu = updatedCpu;
return this;
}
build() {
return this.computer;
}
}
const buildedPc = new ComputerBuilder()
.addCooler('Noctua nh-d15')
.addSsd('Samsung 970 evo')
.updateCpu('Ryzen 9 3950x')
.updateGraphics('rx 5700xt')
.updateMotherboard('asrock taichi x570')
.updateRam('hyperx predator')
.updatePsu('Seasonic ssr-750px')
.build();
// console.log(buildedPc);
Adapter:
class EuropeanSocket {
constructor(voltage) {
this.voltage = voltage;
}
switchOn() {
if (this.voltage === 220) {
console.log('💡 220v');
} else {
console.log('Voltage is incorrect');
}
}
}
class AmericanSocket {
constructor(voltage) {
this.voltage = voltage;
}
switchOn() {
if (this.voltage === 110) {
console.log('💡 110v');
} else {
console.log('Voltage is incorrect');
}
}
}
class SocketAdapter {
constructor(socket) { // americanWrong object
this.socket = socket;
}
switchOn() {
switch (this.socket.voltage) {
case 110:
this.socket.voltage = 220;
this.socket.switchOn();
break;
case 220:
this.socket.voltage = 110;
this.socket.switchOn();
break;
default:
console.log('Wrong voltage');
}
}
}
const euroWrong = new EuropeanSocket(110);
euroWrong.switchOn();
const euroOk = new EuropeanSocket(220);
euroOk.switchOn();
const americanWrong = new AmericanSocket(220);
americanWrong.switchOn();
const americanOk = new AmericanSocket(110);
americanOk.switchOn();
const adapter = new SocketAdapter(americanWrong); // americanWrong that doesn't work without adapter
adapter.switchOn();