Тоже хотел спросить про этот момент: по спецификации ES6 через static определяются только методы, не свойства. Это новая спецификация или что? Явно не работает в стабильной ноде, зачем вы это используете?
Есть несколько спорных моментов в понимании автором паттернов: 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". В данной части автор рассматривает простое наследование классов, не имеющее к поведенческим паттернам никакого отношения. Автору спасибо за возможность вспомнить и повторно проанализировать цели использования паттернов! :)
Дай бог вам здоровья. Я думал я один идиот и не вдуплил почему фабрика и фасад в этом примере одно и тоже почти, темплейт просто обычное наследование и так далее. Только начинаю погружаться в особенности паттернов в js, трудно найти живые примеры. Вы в 1 комментарии объяснили часть вопросов, которые возникали в процессе видео. 👍
Обычно паттерны, это ты смотришь на статью и после нескольких строк кода отпадает желание читать. А изучить нужно) Здесь настолько очевидные примеры, написаные на es6, что инфа сама влетает в голову. Причем все подходы начинают казаться очевидными. Ловишь себя на мысле, что так логично делать. Правда, видео смотрел на 1.5 скорости, но это никак не минус) Спасибо!
Паттерны по программированию Constructor, Factory, Prototype, Singleton, Adapter, Decorator, Façade, Flyweight, Proxy, Chain of Responsibility, Command, Iterator, Mediator, Observer, State, Strategy, Template. Для меня это взрыв мозга, их нужно выучить или просто знать об их существовании, есть вещи которые просто не укладываются в голове. Владилен Спасибо Тебе.
@@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)
Chain of responsibility, показанный тут, на самом деле является паттерном под названием "Builder". "Chain of responsibility" сам по себе подразумевает, что у нас есть разные классы, совместно выполняющие какую-то сложную задачу, и реализован механизм передачи данных от одного класса к другому по мере обработки данных.
Понравилось как в твоём IDE автоматом выводит название переданных параметров в функции. Если кому интересно как так сделать в VS Code просто установите расширение JS Parameter Annotations.
если нужно изменить цвет названия этих параметров под вашу тему: то просто в settings.json добавьте нужный цвет: "workbench.colorCustomizations": { "jsannotations.annotationForeground": "#697098" },
Отличные уроки на темы которые давно надо было осветить в таком ключе. Такой контент беспорно очень тяжело готовить и объяснять. Я бы только предложил во время объяснения чего-либо давать чуть больше реальных примеров из жизни, где это можно было бы применить, давай больше кейсов чтоли. Такая проблема у всех, кто объясняет JS - часто примеры оторваны от реальности, пока сам 40 раз не напишешь - не поймешь. Т.е. я смотрю к примеру про прокси, да это круто и волшебно, но как встроить в текущую работу - не очень понятно. Тоже с паттернами, давно хотел ознакомится с ними подробнее и из видео к сожалению не очень понял, как мне здесь и сейчас использовать некоторые из них. А так все видео - 5 баллов и это лучший контент, что я видел на данную тему. На днях куплю курс по Fullstack разработке. Большое спасибо и успехов!
владилен часто в твоих видео встречаю "создаем что-то и оно будет стейтом...", вот хочется как-то по проще что ли, ну и было бы практичнее если бы ты разбирал на более живых примерах, в духе при работе в домом, но опять же на твой вкус и такие голые примеры тоже очень полезны, спасибо за контент)
Как обычно, спасибо за видео) Но Chain of responsibility - это явно что-то другое. На мой взгляд, в этом видеоролике просто показан fluent API в классе MySum, основанный на method chaining
Видео отличное! То, что нужно, для подготовки к собесу. Удивили комменты в стиле "а где точка с запятой?" "а не говорите нам 'господа'" - вы правда из видео только это смогли подчерпнуть?! а че не спрашиваете 'почему отступ в 2 пробела, а не 4' ? Владилен, терпения Вам и не терять мотивацию для создания нового контента. Ну, и 1000 лайков на 16000 просмотров - камон, ребята, вам лень нажать на "пальчик"? Будьте щедрее на лайки)))
Думал смотреть долго , не буду ... Думал почитаю топ 10 паттернов и дело в шляпе , ну и примерчики посмотрю и все ... НО после первого паттерна я понял что нужно искать тетрадку и записывать все по его словам , потому что этот человек приводит жизненные примеры которые ну очень важны ! Удачи тебе Vladilen !
Совет всем кому трудно запускать простые скрипты js в консоли. Устанавливаем NodeJs, sublime text 3(размер инсталятора 10мб), ставим плагин для sublime который называется NodeJS(Preferences->Package Control->Package Install вводим NodeJs нажимаем инсталл) для удобного доступа к файлам можно использовать сайдбар(View -> Sidebar -> Show Sidebar) в который можно перетаскивать папки. Далее открываем из этого сайдбара нужный скрипт нажимаем ALT+R текущий файл скрипта запустится в консоли. Всем хорошего кодинга!
Никто не знает с чем столкнется в реальности. Все примеры уникальные, по опыту скажу, что далеко не всегда реальный пример может помочь в дальнейшем. Среди проектов куча легаси и костылей. Так что такие примеры как бальзам на душу.
спасибо за видео! 14:50 - для чего указывать в 30 строчке ... || MemberFactory.list.simple , если до этого в 29 строчке для параметра type указали значение по умолчанию "simple"?
А может кто-нибудь объяснить разницу между Facade и Factory? Т.е. если мы в первый просто занесём тот список ссылок на классы, то по сути получится именно фабрика, которая собственно проще воспринимается и поддерживается, разве нет?
Очень полезно для меня, как раз собирался изучить теорию по паттернам и затем практиковаться с одним проектом. Начал смотреть на другом канале, но проблема в том, что примеры слишком упрощённые и не понятно, где многие шаблоны вообще можно использовать. Спасибо за полезные видео.
как новичок, могу сказать, что лично мне в данном видео тоже нихера не понятно, как это все может быть использовано в реальности. Зачем создавать 3 класса, а потом создавать 4й, который будет разруливать косяки первых трех, если ... можно было изначальн сделать просто 1 нормальный класс?)) Зачем мутить какую-то дичь с observer, чтобы плюсануть циферку на 1?
Здравствуйте Владилен, в Singleton (25:30) относительно - "Database.instance = this", в developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes нашел нечто подобное, "Статические (class-side) свойства и свойства прототипа должны быть определены за рамками тела класса: Rectangle.staticWidth = 20;" Но это не то что у Вас. Подскажите пожалуйста, где найти материал на тему, создать поле (свойство) класса использую имя класса, например - Database.instance ? Спасибо.
Очень вскользь, хотелось бы поподробней, с несколькими примерами. Либо хотя бы больше уточнений, например какие бывают декораторы, что декорировать можно не только класс. Но в целом очень круто, ничего подобного на русском не видел.
Владилен, спасибо за видео! Но шаблон Цепочка Обязанностей описан вами неверно. Цепочка обязанностей - это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи. refactoring.guru/ru/design-patterns/chain-of-responsibility
Привет, спасибо за отличный видос, есть вопрос по паттерну фасад. Куда сохраняются все жалобы из переменной complaints в родительском классе? нужно делать геттер чтобы их получить?
Примеры были бы гораздо более понятны, если бы ты не только по ходу написания кода давал комментарии, что происходит, но и в самом начале бы объяснял, что вообще мы хотим сделать. Потому что сейчас получается: я создам класс такой-то (зачем?), у него будет метод такой-то(зачем?) и он будет возвращать то-то (зачем?). И только в самом конце примера, человек начинает догадываться зачем все это делалось (вот теперь понятно для чего). И теперь сравни степень понимания, если бы ты сначала объяснил что конкретно мы будем делать, а потом: я создам класс такой-то (понятно для чего), у него будет метод такой-то (понятно для чего) и он будет возвращать то-то (понятно для чего). В том же chain of responsibility. Сказал бы: наша задача сделать так, чтобы была возможность делать так sum1.add(1).add(2).add(3), для этого мы создадим класс MySum у которого будет этот самый метод .add() ... А то получается, что "текст задачи" у тебя в самом конце примера, и пока ты показываешь и рассказываешь "решение" - не понятно самое главное: решение ЧЕГО?
Владилен здравсвуйте, подскажите пожалуйста, что бы посоветовали почитать по основам ООП в контексте JS. Я Сейчас как раз на стадии изучения классов и прототипов, далее в планах React. Спасибо
В патерне Observer желательно так же в методе subscribe(observer) проверять, есть ли уже данный обсервер или использовать Map взамен массива для this.observers
Спасибо ! Вот только не понял точно чем отличаются на примере паттерн Фасада и Фабрики, наследование классов это и есть то что отличает фасад от фабрики?
Владилен, а насколько часто на работе приходится ими пользоваться? Ты показал достаточно много паттернов, значит, ты ими пользовался в реальной разработке?
Владилен, спасибо огромное за данное видео, оно было очень полезно! Но у меня возник вопрос: является паттерн "модуль" в JS до сих пор актуальным? Ибо одни говорят о том, что ES6 решил эту проблему описанную в паттерне, другие говорят о том, что он до сих пор востребован. Хотелось услышать ваше мнение на этот счёт, заранее спасибо.
Я думаю, было бы лучше, если бы ты сделал вместо одного большого видео целый плейлист по шаблонам проэктирования. Во-первых, было бы больше просмотров(суммарно) и удержание было бы выше. Во-вторых, можно было бы больше уделить внимания конкретному паттерну. В-третьих, было бы удобней юзерам, так как не пришлось бы перематывать или спускаться в коменты к тайммапу, чтобы вспомнить или узнать про конкретный паттерн. В-четвёртых, привлеклось бы больше новых сабов. Хотя, в последствии, времени на съёмку ушло бы больше)
Прототип не верная реализация, прототип это посути просто добовление методов клон к своим объектам и всё, не больше не меньше, смысл в том чтобы созданием клона занимался сам объект. Про фабрику можно было добавить, что когда мы в фабрике ставим новые свойства это уже патерн строитель, тое ваша реализация это комбинация 2х паттернов. Chain of Responsibility вообще не то, цепочка обязанностей это когда у нас классы с большой вложенностью, дочерний вызывает какой нибудь эрор, и все классы по цепочке вызывают эрор у себя и у родителя, и каждый на своем уровне что то делает, ну или не делает, а потом просто вызывает родительский super.error(...arg), то есть в этом патерне метод который цепочный обязательно должен быть у всех классов потомков, а то что вы показали это просто каррирование на классе. Паттерн команда, а описываете стратегию, команда это по сути просто небольшой рефакторинг когда мы класс "кнопка удаления" делаем просто "кнопка" более универсальная штука, с полем команда в которую засунули нашу функцию как поле класса, которая что то удаляет. В медиаторе нужно было добавить, что его смысл в том что юзеры друг с другом вообще не взаимодействуют у них нет никакого механизма общения и всё они делают через посредника, это основная его задача для наглядности обычно делают 3 класса разных чтобы было понятно, что 1 общается с 3 тока через 2. Это реально важно потому что этот паттерн реализуют обычно когда уже у нас зоопарк сущностный связанных друг с другом хз как и чтобы как то упорядочить делают всех связанными только с одним медиатором а он уже разруливает. Стратегия у вас это просто наследование хз я патерна не 1 из существующих не уловил. В целом интересно было посмотреть, и вообще пофиг как что называется главное это помнить сам паттерны а не названия, мне например знание названий тока на собесе помогло)
Меня еще в реализации паттерна "состояние" смущеает, что светофор знает про все свои состояния и управляет логикой их переключения (например, если он в состоянии "желтый", он знает, что нужно переключиться в состояние "зеленый"). Я не уверен, возможно такие варианты исполнения тоже существуют, но тогда смысл от всех этих классов с состояниями? Они же призваны убрать логику из основного класса, а не просто хранить в себе кусочки кода.
@@kvaqich а если придет "абракадабра",?))) сначала нужно реализовать подписку, а потом ее юзать, Владилен просто не заметил видимо. (Поясняю, если подписка advanced то она будет simple, так почему сразу не поставить simple, а если нам нужна именно advanced подписка - мы ее реализуем, и тогда запись с примером || 'simple' опять не нужен). Как-то так))
Спасибо за видео! В 14_observer можно добавить отписку. Позволит в ручную удалить подписчиков вместе с уничтожаемым классом/компонентой. В результате - чистая память (или без утечек памяти, aka memory leak) без бесхозных подписчиков.
кстати было бы прикольно видео (там даже получилась бы серия видосов если многое охватывать) по алгоритмам и так же по юнит тестированию в частности Jest и Enzyme к примеру запилить... Народу понравилось бы точно
Еще бы хорошо: 1) Abstract Factory или Factory Method, Builder (какой с них Factory с урока) 2) Bridge, Composite 3) Interpreter, Memento, Visitor Акаунт у вас на facebook или linkedin есть ?
Объяснение паттрена адаптер никак не проясняет момент "зачем". Другими словами зачем мне создавать новый класс что бы использовать старый класс? Какой от этого профит кроме оверкодинга с целью заюзать паттерн? Еще более другими словами - не раскрывается смысл и плюсы от создания адаптера. Еще совсем другими словами - ты вызываешь один и тот же метод .operations с одним и тем же интерфейсом на разных инстансах. В чем смысл? По мне так если есть некий новый класс с новым интерфейсом то он должен использовать класс Адаптер которые подгоняет интерфейс старого класса под новый. В примере этого нету.
Владилен, скажи пожалуйста, а почему ты не ставишь точку с запятой в конце строки, я просто читал в интернете про то, что если проект большой, то в некоторых случаях, перенос строки JS не будет интерпретировать, как её окончание. Насколько это вероятно (правдоподобно)? И стоит ли над этим заморачиваться? Заранее большое спасибо
Спасибо за твои видео, на ютубе много курсов по базовому ЖС а вот по такому продвинотуму намного меньше (если вообще есть), продолжай делать такие видосики) и еще по продвинотому ангуляру (практикум какой то), спасибою
__proto__ - не безопасный способ определения является ли инстанс наследником класса, так как он деприкейтет console.log(carWithOwner.__proto__ === car); лучше заменить на: console.log(Object.getPrototypeOf(carWithOwner) === car);
Владилен, если не секрет где ты работаешь? Фрилансишь на апворке или в компании. B сколько ты зарабатываешь в месяц? Просто интересно))) И сколько лет ты уже в программировании? Хочу просто понять сколько нужно потратить лет чтобы иметь такой опыт и сколько можно зарабатывать в перспективе
Ребят, у кого выдает ошибку
static list = {
^
SyntaxError: Unexpected token =
Обновите версию NodeJS до последней
не работает на посл версии, браузер говорит я дебил, bad method definition
@@denisdavydoff7863 В браузере и не должно работать.
день убил, чтобы понять почему не работает, огромное спасибо за коммент
Спасибо, помогло!
Тоже хотел спросить про этот момент: по спецификации ES6 через static определяются только методы, не свойства. Это новая спецификация или что? Явно не работает в стабильной ноде, зачем вы это используете?
Есть несколько спорных моментов в понимании автором паттернов:
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к
Дай бог вам здоровья. Я думал я один идиот и не вдуплил почему фабрика и фасад в этом примере одно и тоже почти, темплейт просто обычное наследование и так далее. Только начинаю погружаться в особенности паттернов в js, трудно найти живые примеры. Вы в 1 комментарии объяснили часть вопросов, которые возникали в процессе видео. 👍
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 в данном видео - никакой.Вместо паттерна фасад была реализована фабрика.
Спасибо!!! Очень круто
Обычно паттерны, это ты смотришь на статью и после нескольких строк кода отпадает желание читать.
А изучить нужно)
Здесь настолько очевидные примеры, написаные на es6, что инфа сама влетает в голову.
Причем все подходы начинают казаться очевидными. Ловишь себя на мысле, что так логично делать.
Правда, видео смотрел на 1.5 скорости, но это никак не минус)
Спасибо!
Паттерны по программированию Constructor, Factory, Prototype, Singleton, Adapter, Decorator, Façade, Flyweight, Proxy, Chain of Responsibility, Command, Iterator, Mediator, Observer, State, Strategy, Template.
Для меня это взрыв мозга, их нужно выучить или просто знать об их существовании, есть вещи которые просто не укладываются в голове.
Владилен Спасибо Тебе.
Господи, СПАСИБО, Владилен!!!!
Нету такого контента на ютубе!
Я считаю важным свещать более продвинутые, тем не менее базовые темы)
@@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
Спасибо Владилен за твои титанические труды. Ты крут
Видео от Владилена - это лучшей it контент на youtube! Спасибо!
Владилен! Выражающаю огромную признательность за твой труд! Лучший!
Chain of responsibility, показанный тут, на самом деле является паттерном под названием "Builder". "Chain of responsibility" сам по себе подразумевает, что у нас есть разные классы, совместно выполняющие какую-то сложную задачу, и реализован механизм передачи данных от одного класса к другому по мере обработки данных.
чотко, спасибо))) с ходу жирный лайк от его величества кодера - СЕООНЛИ
Понравилось как в твоём IDE автоматом выводит название переданных параметров в функции. Если кому интересно как так сделать в VS Code просто установите расширение JS Parameter Annotations.
если нужно изменить цвет названия этих параметров под вашу тему:
то просто в settings.json добавьте нужный цвет:
"workbench.colorCustomizations": {
"jsannotations.annotationForeground": "#697098"
},
Все делает за вас редактор. Не понимаю почему это вам так нравится?
@@РоманВоловик-з3д а тебе больше нравится печатать, чем программировать?
Больше нравится пользоватся нормальным редактором!
@@РоманВоловик-з3д а нормальный это какой? Который не экономит твое время путем автокомплита?
Отличные уроки на темы которые давно надо было осветить в таком ключе. Такой контент беспорно очень тяжело готовить и объяснять. Я бы только предложил во время объяснения чего-либо давать чуть больше реальных примеров из жизни, где это можно было бы применить, давай больше кейсов чтоли.
Такая проблема у всех, кто объясняет JS - часто примеры оторваны от реальности, пока сам 40 раз не напишешь - не поймешь.
Т.е. я смотрю к примеру про прокси, да это круто и волшебно, но как встроить в текущую работу - не очень понятно. Тоже с паттернами, давно хотел ознакомится с ними подробнее и из видео к сожалению не очень понял, как мне здесь и сейчас использовать некоторые из них. А так все видео - 5 баллов и это лучший контент, что я видел на данную тему. На днях куплю курс по Fullstack разработке. Большое спасибо и успехов!
Было бы отлично увидеть паттерны для библиотек/фреймворков, начиная с Vue.js. Спасибо.
Вы лучший. 💪
Можно еще про Алгоритмы сортировки
Такой объем информации лучше делить на части. Смотрел два дня ))
Спасибо за труд!
владилен часто в твоих видео встречаю "создаем что-то и оно будет стейтом...", вот хочется как-то по проще что ли, ну и было бы практичнее если бы ты разбирал на более живых примерах, в духе при работе в домом, но опять же на твой вкус и такие голые примеры тоже очень полезны, спасибо за контент)
Эх, где ты был лет 6 назад, когда я этого ничего не понимал... :(
Мне на фоне интересно было послушать, спасибо за видео!
6 лет назад активно работал и сам узнавал про все это)
@@VladilenMinin то-есть надо 6 лет что бы стать профи? :)
@@stanfarshtei1291 надо практика, а не время. важно сколько ты вкладываешь часов в свое дело, а не лет.
Владилен, ты Бог Javascripta
Как обычно, спасибо за видео)
Но Chain of responsibility - это явно что-то другое. На мой взгляд, в этом видеоролике просто показан fluent API в классе MySum, основанный на method chaining
Видео отличное! То, что нужно, для подготовки к собесу. Удивили комменты в стиле "а где точка с запятой?" "а не говорите нам 'господа'" - вы правда из видео только это смогли подчерпнуть?! а че не спрашиваете 'почему отступ в 2 пробела, а не 4' ?
Владилен, терпения Вам и не терять мотивацию для создания нового контента.
Ну, и 1000 лайков на 16000 просмотров - камон, ребята, вам лень нажать на "пальчик"? Будьте щедрее на лайки)))
Думал смотреть долго , не буду ... Думал почитаю топ 10 паттернов и дело в шляпе , ну и примерчики посмотрю и все ... НО после первого паттерна я понял что нужно искать тетрадку и записывать все по его словам , потому что этот человек приводит жизненные примеры которые ну очень важны ! Удачи тебе Vladilen !
Можете навести примеры шде и как можно использовать эти патерны в контексте разработки на React?
СПАСИБО, Владилен!!!! Прям супер как вовремя, все что нужно! Всех благ тебе
Отличное полезное видео, спасибо! (пара ремарок по английскому: vehicle - читается как "Виикл", light - свет, цвет будет color)
ещё не досмотрел видос, не успел. Но материал усваивается и понимается весьма не сложно. Спасибо, на досуге досмотрю до конца обязательно
Обязательно досмотри)
Эта тема настолько редкая, что заслуживает ЛайкШер даже без просмотра!
Твоя продуктивность зашкаливает!)) Спасибо
Совет всем кому трудно запускать простые скрипты js в консоли. Устанавливаем NodeJs, sublime text 3(размер инсталятора 10мб), ставим плагин для sublime который называется NodeJS(Preferences->Package Control->Package Install вводим NodeJs нажимаем инсталл) для удобного доступа к файлам можно использовать сайдбар(View -> Sidebar -> Show Sidebar) в который можно перетаскивать папки. Далее открываем из этого сайдбара нужный скрипт нажимаем ALT+R текущий файл скрипта запустится в консоли. Всем хорошего кодинга!
Я то думал, что это просто способы решения каких-то задач, а их паттернами назвали?)
Спасибо, было интересно!
паттерны - это и есть способы решения каких-то задач.
Спасибо за видео! Будет здорово, если на канале появится видео про утечки памяти, особенно про то, как их отследить)
Это очень круто, но хотелось бы более реальные примеры использования этих паттернов.
Никто не знает с чем столкнется в реальности. Все примеры уникальные, по опыту скажу, что далеко не всегда реальный пример может помочь в дальнейшем. Среди проектов куча легаси и костылей. Так что такие примеры как бальзам на душу.
Огромное спасибо! Одна из самых основных тем, на мой взгляд.
спасибо за видео!
14:50 - для чего указывать в 30 строчке ... || MemberFactory.list.simple , если до этого в 29 строчке для параметра type указали значение по умолчанию "simple"?
Если мы передадим строку, которой нет в фактори, например 'ffefs'. Тогда он не найдет и отдаст по умолчанию
тогда, получается, в 29 строчке нет необходимости задавать значение type по умолчанию.
спасибо огромное!!!
давно ждал внятного разбора на эту тему
Приятного просмотра)
Вы хорошо стартанули, Владилен. Если не остановитесь - через год Вы будете №1 на площадке TH-cam IT Russian )
А может кто-нибудь объяснить разницу между Facade и Factory? Т.е. если мы в первый просто занесём тот список ссылок на классы, то по сути получится именно фабрика, которая собственно проще воспринимается и поддерживается, разве нет?
Лучшее объяснение паттернов в рунете
Владлен, у тебя талант! Смотрю только твои ролики, даже курс купил по Node JS)
Очередной годный ролик под конспект. спасибо бро!
Было бы очень интересно посмотреть в каком то реальном мини проекте или в процессе создании очередного велосипеда
загугли fizz buzz enterprise edition
Владилен, это нереально полезный урок для меня. Спасибо огромное!
Все ок, Единственное, просьба или уменьшить шрифт кода, или в качестве резюме показать весь код
Yo,Vladilen спасибо!
Как всегда Топ. НО. В Фасаде разве мы можем получить доступ к массиву, который заполняем через метод add?
Очень полезно для меня, как раз собирался изучить теорию по паттернам и затем практиковаться с одним проектом. Начал смотреть на другом канале, но проблема в том, что примеры слишком упрощённые и не понятно, где многие шаблоны вообще можно использовать. Спасибо за полезные видео.
как новичок, могу сказать, что лично мне в данном видео тоже нихера не понятно, как это все может быть использовано в реальности.
Зачем создавать 3 класса, а потом создавать 4й, который будет разруливать косяки первых трех, если ... можно было изначальн сделать просто 1 нормальный класс?))
Зачем мутить какую-то дичь с observer, чтобы плюсануть циферку на 1?
Судя по опыту цепочка обязанностей не так реализуется. Её цель отделить привязку отправителя запроса и его получателя. Проверьте пожалуйста.
УУу что-то очень годное подъехало, в прочем как обычно :3
Спасибо большое за видео.
Планирую курс по vue у вас приобрести.
Огромное спасибо за видео! Как всегда все четко, понятно и доступно! Удачи и успехов!
Здравствуйте Владилен, в Singleton (25:30) относительно - "Database.instance = this", в developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Classes нашел нечто подобное, "Статические (class-side) свойства и свойства прототипа должны быть определены за рамками тела класса: Rectangle.staticWidth = 20;" Но это не то что у Вас. Подскажите пожалуйста, где найти материал на тему, создать поле (свойство) класса использую имя класса, например - Database.instance ? Спасибо.
Очень вскользь, хотелось бы поподробней, с несколькими примерами. Либо хотя бы больше уточнений, например какие бывают декораторы, что декорировать можно не только класс. Но в целом очень круто, ничего подобного на русском не видел.
Отличное видео! Такого подробного видео я не видел
Добрый день, а почему на 43:14 вы создаете метод (reply) заглушку, может лучше в методе add обернуть вызов метода reply в конструкцию try/catch ?
Во Flyweight еще нужно использовать ограничение кеша до определенного размера, иначе можно сделать memory leak.
Прекрасная работа! Спасибо огромное за проделанный труд!
Спасибо за видео, полезноно! Но все же ; лучше ставить в конце команд, меньше ошибок будет! Это как книгу писать без разделительных знаков!
просто лучший 👍👍👍👍👍👍
спасибо!)
желаю обогнать Хауди Хо
ТОП КОНТЕНТ!!! Благодарю!
Владилен, спасибо за видео! Но шаблон Цепочка Обязанностей описан вами неверно. Цепочка обязанностей - это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи. refactoring.guru/ru/design-patterns/chain-of-responsibility
Привет, спасибо за отличный видос, есть вопрос по паттерну фасад. Куда сохраняются все жалобы из переменной complaints в родительском классе? нужно делать геттер чтобы их получить?
Примеры были бы гораздо более понятны, если бы ты не только по ходу написания кода давал комментарии, что происходит, но и в самом начале бы объяснял, что вообще мы хотим сделать.
Потому что сейчас получается: я создам класс такой-то (зачем?), у него будет метод такой-то(зачем?) и он будет возвращать то-то (зачем?). И только в самом конце примера, человек начинает догадываться зачем все это делалось (вот теперь понятно для чего).
И теперь сравни степень понимания, если бы ты сначала объяснил что конкретно мы будем делать, а потом: я создам класс такой-то (понятно для чего), у него будет метод такой-то (понятно для чего) и он будет возвращать то-то (понятно для чего).
В том же chain of responsibility. Сказал бы: наша задача сделать так, чтобы была возможность делать так sum1.add(1).add(2).add(3), для этого мы создадим класс MySum у которого будет этот самый метод .add() ... А то получается, что "текст задачи" у тебя в самом конце примера, и пока ты показываешь и рассказываешь "решение" - не понятно самое главное: решение ЧЕГО?
Красавелла Владилен! Спасибо огромнейшее)))
Владилен здравсвуйте, подскажите пожалуйста, что бы посоветовали почитать по основам ООП в контексте JS. Я Сейчас как раз на стадии изучения классов и прототипов, далее в планах React. Спасибо
В патерне Observer желательно так же в методе subscribe(observer) проверять, есть ли уже данный обсервер или использовать Map взамен массива для this.observers
А почему этого видео нет в плейлисте про jscrit, чуть не пропустил интересную тему.
Спасибо ! Вот только не понял точно чем отличаются на примере паттерн Фасада и Фабрики, наследование классов это и есть то что отличает фасад от фабрики?
в данном видео - вместо паттерна фасад была реализована фабрика.
Владилен, а насколько часто на работе приходится ими пользоваться? Ты показал достаточно много паттернов, значит, ты ими пользовался в реальной разработке?
Спасибо тебе. Очень нужная информация
Владилен, спасибо огромное за данное видео, оно было очень полезно! Но у меня возник вопрос: является паттерн "модуль" в JS до сих пор актуальным? Ибо одни говорят о том, что ES6 решил эту проблему описанную в паттерне, другие говорят о том, что он до сих пор востребован. Хотелось услышать ваше мнение на этот счёт, заранее спасибо.
Я думаю, было бы лучше, если бы ты сделал вместо одного большого видео целый плейлист по шаблонам проэктирования. Во-первых, было бы больше просмотров(суммарно) и удержание было бы выше. Во-вторых, можно было бы больше уделить внимания конкретному паттерну. В-третьих, было бы удобней юзерам, так как не пришлось бы перематывать или спускаться в коменты к тайммапу, чтобы вспомнить или узнать про конкретный паттерн. В-четвёртых, привлеклось бы больше новых сабов. Хотя, в последствии, времени на съёмку ушло бы больше)
...только не "Вехикл", плиз, а так просто обалденное видео. Спасибо огромное за такой труд!
26:40 чем отличается Database от this ? почему ты используешь название класса внутри конструктора вместо this ?
Прототип не верная реализация, прототип это посути просто добовление методов клон к своим объектам и всё, не больше не меньше, смысл в том чтобы созданием клона занимался сам объект.
Про фабрику можно было добавить, что когда мы в фабрике ставим новые свойства это уже патерн строитель, тое ваша реализация это комбинация 2х паттернов.
Chain of Responsibility вообще не то, цепочка обязанностей это когда у нас классы с большой вложенностью, дочерний вызывает какой нибудь эрор, и все классы по цепочке вызывают эрор у себя и у родителя, и каждый на своем уровне что то делает, ну или не делает, а потом просто вызывает родительский super.error(...arg), то есть в этом патерне метод который цепочный обязательно должен быть у всех классов потомков, а то что вы показали это просто каррирование на классе.
Паттерн команда, а описываете стратегию, команда это по сути просто небольшой рефакторинг когда мы класс "кнопка удаления" делаем просто "кнопка" более универсальная штука, с полем команда в которую засунули нашу функцию как поле класса, которая что то удаляет.
В медиаторе нужно было добавить, что его смысл в том что юзеры друг с другом вообще не взаимодействуют у них нет никакого механизма общения и всё они делают через посредника, это основная его задача для наглядности обычно делают 3 класса разных чтобы было понятно, что 1 общается с 3 тока через 2. Это реально важно потому что этот паттерн реализуют обычно когда уже у нас зоопарк сущностный связанных друг с другом хз как и чтобы как то упорядочить делают всех связанными только с одним медиатором а он уже разруливает.
Стратегия у вас это просто наследование хз я патерна не 1 из существующих не уловил.
В целом интересно было посмотреть, и вообще пофиг как что называется главное это помнить сам паттерны а не названия, мне например знание названий тока на собесе помогло)
Интересно, что скажет по поводу замечаний сам автор))))
Че т он молчит.
Патер приспособленец, неверно описан, суть его разделение состояния на характерное для текущего контекста использование и на базовое не изменяемое.
Посоветуйте тогда информацию где паттерны правильнее описаны, желательно на js/ts. Пожалуйста
Меня еще в реализации паттерна "состояние" смущеает, что светофор знает про все свои состояния и управляет логикой их переключения (например, если он в состоянии "желтый", он знает, что нужно переключиться в состояние "зеленый"). Я не уверен, возможно такие варианты исполнения тоже существуют, но тогда смысл от всех этих классов с состояниями? Они же призваны убрать логику из основного класса, а не просто хранить в себе кусочки кода.
Очень крутое видео, часто сюда заглядываю чтобы освежить знания, спасибо!
В шаблоне проектирования Адаптер не будет ли проще сделать NewCalc extends OldCalc, или это простой пример, и в реальности этого не применить?
А тайп (type=“simple”) же есть по умолчанию, он если ничего не придёт и создаст simple инстанс и || избыточен)?
А если придёт запрос на, к примеру, «advanced» подписку?
@@kvaqich а если придет "абракадабра",?))) сначала нужно реализовать подписку, а потом ее юзать, Владилен просто не заметил видимо. (Поясняю, если подписка advanced то она будет simple, так почему сразу не поставить simple, а если нам нужна именно advanced подписка - мы ее реализуем, и тогда запись с примером || 'simple' опять не нужен). Как-то так))
интересно посмотреть применяемые паттерны с vue js
получается, что HOC из реакта это декоратор
Спасибо за видео!
В 14_observer можно добавить отписку. Позволит в ручную удалить подписчиков вместе с уничтожаемым классом/компонентой. В результате - чистая память (или без утечек памяти, aka memory leak) без бесхозных подписчиков.
Почему в паттерне Constructor не сделать static create() ? Зачем создавать new MemberFactory ? )
кстати было бы прикольно видео (там даже получилась бы серия видосов если многое охватывать) по алгоритмам и так же по юнит тестированию в частности Jest и Enzyme к примеру запилить... Народу понравилось бы точно
Будет такой материал
И еще вопрос по данному видео, правильно я понимаю, что Синглтон в Джаваскрипте нафиг не нужен?
А зачем в фасаде при каждой регистрации создавать новый объект Complaints с новым массивом?
потому что реализовали фабрику, автор ошибся
Огромное спасибо за такой плезный контент! ПРОСЬБА: запиши видео по Reflect.
Спасибо) Желаю скорее набрать 10к)
набрал)
Это очень качественное и нужное видео. Спасибо
О, как и заказывал, благодарствую!)
Владилен, лучший!!!
Еще бы хорошо:
1) Abstract Factory или Factory Method, Builder (какой с них Factory с урока)
2) Bridge, Composite
3) Interpreter, Memento, Visitor
Акаунт у вас на facebook или linkedin есть ?
Добавлю в другом ролике.
Нет, все контакты под видео
1:24:00 правильно произносить - Айгор :)
На ускоренной не правильно можно услышать :)
Спасибо за видео, в процессе возник вопрос, является ли пример с фасадом еще и фабрикой?
Объяснение паттрена адаптер никак не проясняет момент "зачем". Другими словами зачем мне создавать новый класс что бы использовать старый класс? Какой от этого профит кроме оверкодинга с целью заюзать паттерн? Еще более другими словами - не раскрывается смысл и плюсы от создания адаптера. Еще совсем другими словами - ты вызываешь один и тот же метод .operations с одним и тем же интерфейсом на разных инстансах. В чем смысл? По мне так если есть некий новый класс с новым интерфейсом то он должен использовать класс Адаптер которые подгоняет интерфейс старого класса под новый. В примере этого нету.
Владилен, скажи пожалуйста, а почему ты не ставишь точку с запятой в конце строки, я просто читал в интернете про то, что если проект большой, то в некоторых случаях, перенос строки JS не будет интерпретировать, как её окончание. Насколько это вероятно (правдоподобно)? И стоит ли над этим заморачиваться? Заранее большое спасибо
Без нее код чище. Ошибок быть не может, если писать код корректно
Супер контент Владилен ;)
Спасибо за твои видео, на ютубе много курсов по базовому ЖС а вот по такому продвинотуму намного меньше (если вообще есть), продолжай делать такие видосики) и еще по продвинотому ангуляру (практикум какой то), спасибою
По ангуляру в ближайшее время будет еще пара материалов)
__proto__ - не безопасный способ определения является ли инстанс наследником класса, так как он деприкейтет
console.log(carWithOwner.__proto__ === car);
лучше заменить на:
console.log(Object.getPrototypeOf(carWithOwner) === car);
Круто) Очередной лайк.
Владилен, если не секрет где ты работаешь? Фрилансишь на апворке или в компании. B сколько ты зарабатываешь в месяц? Просто интересно))) И сколько лет ты уже в программировании? Хочу просто понять сколько нужно потратить лет чтобы иметь такой опыт и сколько можно зарабатывать в перспективе
Можете допомогти,а принцип open-close не нарушається патерном factory,ми ж порушимо незмінну класу при добавлении нового класа?