Тоже хотел спросить про этот момент: по спецификации 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, показанный тут, на самом деле является паттерном под названием "Builder". "Chain of responsibility" сам по себе подразумевает, что у нас есть разные классы, совместно выполняющие какую-то сложную задачу, и реализован механизм передачи данных от одного класса к другому по мере обработки данных.
Отличные уроки на темы которые давно надо было осветить в таком ключе. Такой контент беспорно очень тяжело готовить и объяснять. Я бы только предложил во время объяснения чего-либо давать чуть больше реальных примеров из жизни, где это можно было бы применить, давай больше кейсов чтоли. Такая проблема у всех, кто объясняет JS - часто примеры оторваны от реальности, пока сам 40 раз не напишешь - не поймешь. Т.е. я смотрю к примеру про прокси, да это круто и волшебно, но как встроить в текущую работу - не очень понятно. Тоже с паттернами, давно хотел ознакомится с ними подробнее и из видео к сожалению не очень понял, как мне здесь и сейчас использовать некоторые из них. А так все видео - 5 баллов и это лучший контент, что я видел на данную тему. На днях куплю курс по Fullstack разработке. Большое спасибо и успехов!
Как обычно, спасибо за видео) Но Chain of responsibility - это явно что-то другое. На мой взгляд, в этом видеоролике просто показан fluent API в классе MySum, основанный на method chaining
Никто не знает с чем столкнется в реальности. Все примеры уникальные, по опыту скажу, что далеко не всегда реальный пример может помочь в дальнейшем. Среди проектов куча легаси и костылей. Так что такие примеры как бальзам на душу.
Видео отличное! То, что нужно, для подготовки к собесу. Удивили комменты в стиле "а где точка с запятой?" "а не говорите нам 'господа'" - вы правда из видео только это смогли подчерпнуть?! а че не спрашиваете 'почему отступ в 2 пробела, а не 4' ? Владилен, терпения Вам и не терять мотивацию для создания нового контента. Ну, и 1000 лайков на 16000 просмотров - камон, ребята, вам лень нажать на "пальчик"? Будьте щедрее на лайки)))
Думал смотреть долго , не буду ... Думал почитаю топ 10 паттернов и дело в шляпе , ну и примерчики посмотрю и все ... НО после первого паттерна я понял что нужно искать тетрадку и записывать все по его словам , потому что этот человек приводит жизненные примеры которые ну очень важны ! Удачи тебе Vladilen !
Очень вскользь, хотелось бы поподробней, с несколькими примерами. Либо хотя бы больше уточнений, например какие бывают декораторы, что декорировать можно не только класс. Но в целом очень круто, ничего подобного на русском не видел.
кстати было бы прикольно видео (там даже получилась бы серия видосов если многое охватывать) по алгоритмам и так же по юнит тестированию в частности Jest и Enzyme к примеру запилить... Народу понравилось бы точно
Спасибо за твои видео, на ютубе много курсов по базовому ЖС а вот по такому продвинотуму намного меньше (если вообще есть), продолжай делать такие видосики) и еще по продвинотому ангуляру (практикум какой то), спасибою
Очень полезно для меня, как раз собирался изучить теорию по паттернам и затем практиковаться с одним проектом. Начал смотреть на другом канале, но проблема в том, что примеры слишком упрощённые и не понятно, где многие шаблоны вообще можно использовать. Спасибо за полезные видео.
как новичок, могу сказать, что лично мне в данном видео тоже нихера не понятно, как это все может быть использовано в реальности. Зачем создавать 3 класса, а потом создавать 4й, который будет разруливать косяки первых трех, если ... можно было изначальн сделать просто 1 нормальный класс?)) Зачем мутить какую-то дичь с observer, чтобы плюсануть циферку на 1?
Ну как теория для собеседования сойдет, практический новичку будет нереально сложно понять где какой из этих паттернов использовать и как их использовать. Можно снять получасовое видео по самым наиболее популярным паттернам с использованием в разработке какого нибудь приложения. Вот идея для видео
Спасибо за видео! В 14_observer можно добавить отписку. Позволит в ручную удалить подписчиков вместе с уничтожаемым классом/компонентой. В результате - чистая память (или без утечек памяти, aka memory leak) без бесхозных подписчиков.
спасибо за видео! 14:50 - для чего указывать в 30 строчке ... || MemberFactory.list.simple , если до этого в 29 строчке для параметра type указали значение по умолчанию "simple"?
Совет всем кому трудно запускать простые скрипты js в консоли. Устанавливаем NodeJs, sublime text 3(размер инсталятора 10мб), ставим плагин для sublime который называется NodeJS(Preferences->Package Control->Package Install вводим NodeJs нажимаем инсталл) для удобного доступа к файлам можно использовать сайдбар(View -> Sidebar -> Show Sidebar) в который можно перетаскивать папки. Далее открываем из этого сайдбара нужный скрипт нажимаем ALT+R текущий файл скрипта запустится в консоли. Всем хорошего кодинга!
Здравствуйте Владилен, в 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.
Отлично, доступно и интересно. Хотелось бы услышать Ваше экспертное мнение по поводу PWA-приложений. Их роль, перспективы ну и по возможности примерчик. Спасибо.
спасибо за твои видео, они достаточно лаконичны и информативны, чтобы поддерживать себя в информационном тонусе. но, хочу обратить твое внимание на небольшой косяк -- ты часто используешь слова "допустим" и "например" не к месту, что сбивает с толку, поскольку после них подразумевается однозначное действие.
@@kvaqich а если придет "абракадабра",?))) сначала нужно реализовать подписку, а потом ее юзать, Владилен просто не заметил видимо. (Поясняю, если подписка advanced то она будет simple, так почему сразу не поставить simple, а если нам нужна именно advanced подписка - мы ее реализуем, и тогда запись с примером || 'simple' опять не нужен). Как-то так))
попыталась в codesandbox воспроизвести пример с фабрикой, static list = {...} выдает ошибку - Support for the experimental syntax 'classProperties' isn't currently enabled.
Ребят, у кого выдает ошибку
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! Спасибо!
Владилен! Выражающаю огромную признательность за твой труд! Лучший!
Вы лучший. 💪
Можно еще про Алгоритмы сортировки
чотко, спасибо))) с ходу жирный лайк от его величества кодера - СЕООНЛИ
ещё не досмотрел видос, не успел. Но материал усваивается и понимается весьма не сложно. Спасибо, на досуге досмотрю до конца обязательно
Обязательно досмотри)
Эх, где ты был лет 6 назад, когда я этого ничего не понимал... :(
Мне на фоне интересно было послушать, спасибо за видео!
6 лет назад активно работал и сам узнавал про все это)
@@VladilenMinin то-есть надо 6 лет что бы стать профи? :)
@@stanfarshtei1291 надо практика, а не время. важно сколько ты вкладываешь часов в свое дело, а не лет.
СПАСИБО, Владилен!!!! Прям супер как вовремя, все что нужно! Всех благ тебе
Понравилось как в твоём IDE автоматом выводит название переданных параметров в функции. Если кому интересно как так сделать в VS Code просто установите расширение JS Parameter Annotations.
если нужно изменить цвет названия этих параметров под вашу тему:
то просто в settings.json добавьте нужный цвет:
"workbench.colorCustomizations": {
"jsannotations.annotationForeground": "#697098"
},
Все делает за вас редактор. Не понимаю почему это вам так нравится?
@@РоманВоловик-з3д а тебе больше нравится печатать, чем программировать?
Больше нравится пользоватся нормальным редактором!
@@РоманВоловик-з3д а нормальный это какой? Который не экономит твое время путем автокомплита?
Я то думал, что это просто способы решения каких-то задач, а их паттернами назвали?)
Спасибо, было интересно!
паттерны - это и есть способы решения каких-то задач.
спасибо огромное!!!
давно ждал внятного разбора на эту тему
Приятного просмотра)
владилен часто в твоих видео встречаю "создаем что-то и оно будет стейтом...", вот хочется как-то по проще что ли, ну и было бы практичнее если бы ты разбирал на более живых примерах, в духе при работе в домом, но опять же на твой вкус и такие голые примеры тоже очень полезны, спасибо за контент)
Спасибо за видео! Будет здорово, если на канале появится видео про утечки памяти, особенно про то, как их отследить)
Chain of responsibility, показанный тут, на самом деле является паттерном под названием "Builder". "Chain of responsibility" сам по себе подразумевает, что у нас есть разные классы, совместно выполняющие какую-то сложную задачу, и реализован механизм передачи данных от одного класса к другому по мере обработки данных.
Отличные уроки на темы которые давно надо было осветить в таком ключе. Такой контент беспорно очень тяжело готовить и объяснять. Я бы только предложил во время объяснения чего-либо давать чуть больше реальных примеров из жизни, где это можно было бы применить, давай больше кейсов чтоли.
Такая проблема у всех, кто объясняет JS - часто примеры оторваны от реальности, пока сам 40 раз не напишешь - не поймешь.
Т.е. я смотрю к примеру про прокси, да это круто и волшебно, но как встроить в текущую работу - не очень понятно. Тоже с паттернами, давно хотел ознакомится с ними подробнее и из видео к сожалению не очень понял, как мне здесь и сейчас использовать некоторые из них. А так все видео - 5 баллов и это лучший контент, что я видел на данную тему. На днях куплю курс по Fullstack разработке. Большое спасибо и успехов!
Было бы отлично увидеть паттерны для библиотек/фреймворков, начиная с Vue.js. Спасибо.
Как обычно, спасибо за видео)
Но Chain of responsibility - это явно что-то другое. На мой взгляд, в этом видеоролике просто показан fluent API в классе MySum, основанный на method chaining
Огромное спасибо! Одна из самых основных тем, на мой взгляд.
Твоя продуктивность зашкаливает!)) Спасибо
Владлен, у тебя талант! Смотрю только твои ролики, даже курс купил по Node JS)
Владилен, ты Бог Javascripta
Это очень круто, но хотелось бы более реальные примеры использования этих паттернов.
Никто не знает с чем столкнется в реальности. Все примеры уникальные, по опыту скажу, что далеко не всегда реальный пример может помочь в дальнейшем. Среди проектов куча легаси и костылей. Так что такие примеры как бальзам на душу.
Вы хорошо стартанули, Владилен. Если не остановитесь - через год Вы будете №1 на площадке UA-cam IT Russian )
Отличное полезное видео, спасибо! (пара ремарок по английскому: vehicle - читается как "Виикл", light - свет, цвет будет color)
Видео отличное! То, что нужно, для подготовки к собесу. Удивили комменты в стиле "а где точка с запятой?" "а не говорите нам 'господа'" - вы правда из видео только это смогли подчерпнуть?! а че не спрашиваете 'почему отступ в 2 пробела, а не 4' ?
Владилен, терпения Вам и не терять мотивацию для создания нового контента.
Ну, и 1000 лайков на 16000 просмотров - камон, ребята, вам лень нажать на "пальчик"? Будьте щедрее на лайки)))
Владилен, это нереально полезный урок для меня. Спасибо огромное!
Очередной годный ролик под конспект. спасибо бро!
Огромное спасибо за видео! Как всегда все четко, понятно и доступно! Удачи и успехов!
Эта тема настолько редкая, что заслуживает ЛайкШер даже без просмотра!
Yo,Vladilen спасибо!
Думал смотреть долго , не буду ... Думал почитаю топ 10 паттернов и дело в шляпе , ну и примерчики посмотрю и все ... НО после первого паттерна я понял что нужно искать тетрадку и записывать все по его словам , потому что этот человек приводит жизненные примеры которые ну очень важны ! Удачи тебе Vladilen !
Прекрасная работа! Спасибо огромное за проделанный труд!
Очень вскользь, хотелось бы поподробней, с несколькими примерами. Либо хотя бы больше уточнений, например какие бывают декораторы, что декорировать можно не только класс. Но в целом очень круто, ничего подобного на русском не видел.
УУу что-то очень годное подъехало, в прочем как обычно :3
кстати было бы прикольно видео (там даже получилась бы серия видосов если многое охватывать) по алгоритмам и так же по юнит тестированию в частности Jest и Enzyme к примеру запилить... Народу понравилось бы точно
Будет такой материал
Во Flyweight еще нужно использовать ограничение кеша до определенного размера, иначе можно сделать memory leak.
Все ок, Единственное, просьба или уменьшить шрифт кода, или в качестве резюме показать весь код
Спасибо за твои видео, на ютубе много курсов по базовому ЖС а вот по такому продвинотуму намного меньше (если вообще есть), продолжай делать такие видосики) и еще по продвинотому ангуляру (практикум какой то), спасибою
По ангуляру в ближайшее время будет еще пара материалов)
Очень полезно для меня, как раз собирался изучить теорию по паттернам и затем практиковаться с одним проектом. Начал смотреть на другом канале, но проблема в том, что примеры слишком упрощённые и не понятно, где многие шаблоны вообще можно использовать. Спасибо за полезные видео.
как новичок, могу сказать, что лично мне в данном видео тоже нихера не понятно, как это все может быть использовано в реальности.
Зачем создавать 3 класса, а потом создавать 4й, который будет разруливать косяки первых трех, если ... можно было изначальн сделать просто 1 нормальный класс?))
Зачем мутить какую-то дичь с observer, чтобы плюсануть циферку на 1?
Отличное видео! Такого подробного видео я не видел
Спасибо большое за видео.
Планирую курс по vue у вас приобрести.
Очень крутое видео, часто сюда заглядываю чтобы освежить знания, спасибо!
Лучшее объяснение паттернов в рунете
Огромное спасибо за такой плезный контент! ПРОСЬБА: запиши видео по Reflect.
Спасибо тебе. Очень нужная информация
Было бы очень интересно посмотреть в каком то реальном мини проекте или в процессе создании очередного велосипеда
загугли fizz buzz enterprise edition
Ну как теория для собеседования сойдет, практический новичку будет нереально сложно понять где какой из этих паттернов использовать и как их использовать. Можно снять получасовое видео по самым наиболее популярным паттернам с использованием в разработке какого нибудь приложения. Вот идея для видео
Спасибо) Желаю скорее набрать 10к)
набрал)
Это очень качественное и нужное видео. Спасибо
Спасибо за видео!
В 14_observer можно добавить отписку. Позволит в ручную удалить подписчиков вместе с уничтожаемым классом/компонентой. В результате - чистая память (или без утечек памяти, aka memory leak) без бесхозных подписчиков.
просто лучший 👍👍👍👍👍👍
спасибо!)
желаю обогнать Хауди Хо
Супер контент Владилен ;)
спасибо за видео!
14:50 - для чего указывать в 30 строчке ... || MemberFactory.list.simple , если до этого в 29 строчке для параметра type указали значение по умолчанию "simple"?
Если мы передадим строку, которой нет в фактори, например 'ffefs'. Тогда он не найдет и отдаст по умолчанию
тогда, получается, в 29 строчке нет необходимости задавать значение type по умолчанию.
Совет всем кому трудно запускать простые скрипты js в консоли. Устанавливаем NodeJs, sublime text 3(размер инсталятора 10мб), ставим плагин для sublime который называется NodeJS(Preferences->Package Control->Package Install вводим NodeJs нажимаем инсталл) для удобного доступа к файлам можно использовать сайдбар(View -> Sidebar -> Show Sidebar) в который можно перетаскивать папки. Далее открываем из этого сайдбара нужный скрипт нажимаем ALT+R текущий файл скрипта запустится в консоли. Всем хорошего кодинга!
Спасибо за видео, полезноно! Но все же ; лучше ставить в конце команд, меньше ошибок будет! Это как книгу писать без разделительных знаков!
Красавелла Владилен! Спасибо огромнейшее)))
Круто! Еще бы такой же урок по ООП в js es6 на примерах
Есть ролик на канале
Интересно, спасибо за инфу!
Здравствуйте Владилен, в Singleton (25:30) относительно - "Database.instance = this", в developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes нашел нечто подобное, "Статические (class-side) свойства и свойства прототипа должны быть определены за рамками тела класса: Rectangle.staticWidth = 20;" Но это не то что у Вас. Подскажите пожалуйста, где найти материал на тему, создать поле (свойство) класса использую имя класса, например - Database.instance ? Спасибо.
Ну тут жирный лайк, очень хорошая работа!
Благодарю)
...только не "Вехикл", плиз, а так просто обалденное видео. Спасибо огромное за такой труд!
Я думаю, было бы лучше, если бы ты сделал вместо одного большого видео целый плейлист по шаблонам проэктирования. Во-первых, было бы больше просмотров(суммарно) и удержание было бы выше. Во-вторых, можно было бы больше уделить внимания конкретному паттерну. В-третьих, было бы удобней юзерам, так как не пришлось бы перематывать или спускаться в коменты к тайммапу, чтобы вспомнить или узнать про конкретный паттерн. В-четвёртых, привлеклось бы больше новых сабов. Хотя, в последствии, времени на съёмку ушло бы больше)
Спасибо за полезные видео!)
интересно посмотреть применяемые паттерны с vue js
О, как и заказывал, благодарствую!)
Так нравится ,что Сенсей нас называет "Господа"))))
спасибо большое за уроки
В паттерне фабрика вроде же нельзя добавлять новые свойства как свойство "тип". Это вроде как будет похоже на билдер.
Я не особо разбираюсь но я на такое переписал:
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();
1:24:00 правильно произносить - Айгор :)
На ускоренной не правильно можно услышать :)
материал просто супер, на вес золота, спасибо за работу! по BDD видео не планируется? на ютубе совсем по этой теме ничего нет, да и в рунете тоже.
ТОП КОНТЕНТ!!! Благодарю!
15:20, 30 строка. Зачем нужен || MemberFactory.list.simple, если в параметрах и так передаётся этот тип по умолчанию?
Как всегда Топ. НО. В Фасаде разве мы можем получить доступ к массиву, который заполняем через метод add?
Отлично, доступно и интересно. Хотелось бы услышать Ваше экспертное мнение по поводу PWA-приложений. Их роль, перспективы ну и по возможности примерчик. Спасибо.
Тему PWA буду отдельно освещать. Они сыроваты еще для полноценного использования из-за разных платформ и бразуеров
Хорошее толкование.
Владилен, спасибо за видео!
Интересно было бы про паттерны в React и Express (если таковые есть)
26:40 чем отличается Database от this ? почему ты используешь название класса внутри конструктора вместо this ?
спасибо за твои видео, они достаточно лаконичны и информативны, чтобы поддерживать себя в информационном тонусе.
но, хочу обратить твое внимание на небольшой косяк -- ты часто используешь слова "допустим" и "например" не к месту, что сбивает с толку, поскольку после них подразумевается однозначное действие.
Согласен, благодарю за отзыв
Добрый день, а почему на 43:14 вы создаете метод (reply) заглушку, может лучше в методе add обернуть вызов метода reply в конструкцию try/catch ?
Спасибо, круто, супер, продолжай в то же духе. 👍
Круто) Очередной лайк.
на тайминге 14:44 вообще какой - то странный подход...тогда зачем параметр по умолчанию принимать в create ??
Тоже не понял)
А, вон там ниже чувак правильно написал. Типа можно тип передать что попало (например, "bruh"), и тогда надо фолбек как раз делать
@@ВладимирТайдонов-я6л Хмм...ок
то что мне так не хватало, спасибо
Спасибо! Отличное видео
получается, что HOC из реакта это декоратор
В шаблоне проектирования Адаптер не будет ли проще сделать NewCalc extends OldCalc, или это простой пример, и в реальности этого не применить?
А тайп (type=“simple”) же есть по умолчанию, он если ничего не придёт и создаст simple инстанс и || избыточен)?
А если придёт запрос на, к примеру, «advanced» подписку?
@@kvaqich а если придет "абракадабра",?))) сначала нужно реализовать подписку, а потом ее юзать, Владилен просто не заметил видимо. (Поясняю, если подписка advanced то она будет simple, так почему сразу не поставить simple, а если нам нужна именно advanced подписка - мы ее реализуем, и тогда запись с примером || 'simple' опять не нужен). Как-то так))
1:49:40 то чувство, когда backquote рядом с буквой Z 😭. Как всегда, полезное видео. Спасибо!
Спасибо тебе Владилен
Взрыв мозга, особенно медиатор поразил :)
Очень интересное видео! Спасибо! А composite pattern будет рассмотрен?
Bridge, тоже интересно посмотреть
попыталась в codesandbox воспроизвести пример с фабрикой, static list = {...} выдает ошибку - Support for the experimental syntax 'classProperties' isn't currently enabled.
Спасибо за примеры.
очень здорово!!!!Однозначно лайк и подписка!