💡 Принципы SOLID для JavaScript, TypeScript, Node.js и асинхронного программирования

  Рет қаралды 11,549

Timur Shemsedinov

Timur Shemsedinov

Күн бұрын

⭐ Из курса Node.js 2024 и Async 2024, записано, как стартовый семинар для формирования нового курса «Паттерны Async & Node.js» (Переосмысление GRASP, SOLID и GoF паттернов для Frontend & Backend). Содержание:
🔹 Принцип единственной ответственности - SRP (single responsibility principle)
🔹 Принцип открытости/закрытости - OCP (open-closed principle)
🔹 Принцип подстановки Лисков - LSP (Liskov substitution principle)
🔹 Принцип разделения интерфейса - ISP (interface segregation principle)
🔹 Принцип инверсии зависимостей - DIP (dependency inversion principle)
👉 Описание курса Async 2024: github.com/How...
👉 Старый курс по асинхронности: github.com/How...
👉 Node.js 2024 описание курса: github.com/How...
👉 Открытый курс по Node.js: github.com/How...
👉 Оглавление всех открытых лекций: github.com/How...
👉 Github автора: github.com/tsh...

Пікірлер: 38
@oeaoo
@oeaoo 3 ай бұрын
SOLID давно пора переосмыслять. Люди справедливо теряются в расшифровках, а также упарываются в теорию, не осознавая что на практике у них все не так солидно. Все в мире работает не абсолютно, а в меру. И принципы, возведенные в абсолют наоборот, вредят реальным проектам. Как говорят китайцы - настоящее знанее - это знание достаточности. И мудрость разработки заключается в осознавании уместности и меры следования принципам и понимании где их нужно нарушить и ради чего. Тогда разработка будет живая, а значит адаптивная, гибкая и разумная. А значит еще и гуманная, внезапно)
@1Malak16
@1Malak16 3 ай бұрын
Аминь. Подписываюсь под каждым словом.
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
Любые знания и обобщения не переносятся в другие языки автоматически, даже в одном языке с ходом времени нужно все переосмыслять, язык меняется и уже мало кто помнит про псевдомассив arguments и variable hoisting, или про то, что setTimeout может принимать первым аргументом string, а кто помнит, то хотел бы побыстрее забыть об этом.
@oeaoo
@oeaoo 3 ай бұрын
@@TimurShemsedinov ну я занимаюсь джавой и у нас огромная масса теоретических зомби. Не хочу быть категоричным, но знаю точно - очень важно различать поверхностное знание ради самоутверждения от полезного знания, "личностно перпендикулярному".
@artem_travlo
@artem_travlo Ай бұрын
супер ❤
@kai.hexendorf
@kai.hexendorf 2 ай бұрын
"Мы описываем интерфейс, но вся асинхронная составляющая кода теряется. У нас для асинхронного кода нет никакого способа это декларативно описать - как будет работать промис, чтобы прочекать его правильное поведение". А зачем чекать? Идея интерфейса как раз заключается в сокрытии внутренней реализации. Для клиента интерфейса нужно знать как подписаться/отписаться на событие, которое произойдет в будущем, и его даже не должно волновать, будут ли там вообще промисы и как устроены микротаски. Не нравятся промисы, можно задействовать RX. В основе любой реактивной библиотеки лежит паттерн Observable, чьи интерфейсы элементарны и понятны. Не нравится RXjs, можно написать свой минимальный набор реактивных команд на тайпскрипте и дженериках.
@Ajax222able
@Ajax222able 3 ай бұрын
Солидное видео
@somnium2405
@somnium2405 3 ай бұрын
Кстати странно, что empty element приобразовывается в undefined а не в null
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
Это не странно, массивы в js, конечно, универсальная штука, но массивы объектов обычно маленькие, а большими бывают массивы чисел. Ну вот null это пустое значение для ссылочных типов, а undefined - для скалярных. Значит можно пренебречь тем, как обрабатываются маленькие массивы и оптимизировать дырявые массивы для чисел.
@johnstrayk5208
@johnstrayk5208 3 ай бұрын
Сколько же у вас свободного времени такие ролики делать
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
Три таких семинара в неделю
@KvN-UA
@KvN-UA 3 ай бұрын
‼⏳ Сподобалась ідея зробити семінар і взяти конкретну задачу щоб chatGPT вирішував її в різних підходах / стилях, можливо мовах 💯
@kai.hexendorf
@kai.hexendorf 2 ай бұрын
Не понимаю, чем так не угодили интерфейсы тайпскрипта. Пример DI принципа: interface IEncoder { encode: () => any } class FileEncoder implements IEncoder { encode() {...} } class FileStorage { private readonly _encoder: IEncoder constructor(encoder: IEncoder) { this._encoder = encoder } } Модуль верхнего уровня (FileStorage) и нижнего (FileEncoder) зависят от абстракции - IEncoder. Кстати, под абстракциями в ооп мы подразумеваем интерфейсы, абстрактные классы и обобщенные типы. Поэтому "конкретная абстракция" - это оксюморон.
@TimurShemsedinov
@TimurShemsedinov 2 ай бұрын
@@kai.hexendorf Я ни где на интерфейсы не гоню, их нужно использовать даже в js, и нас не должно даже останавливать, что в js они не явные, их можно описать .d.ts или jsdoc но все это для процесса разработки, потом в рантайме они все равно вычисляются как "форма объектов" но для рантайма важна даже последовательность полей, а не только имена и типы. А абстракции - даже переменная это абстракция над адресацией памяти, а цикл - абстракция над потоком управления. Конкретная абстракция - это то, что можно инстанциировать, ну вот ReadableStream, а есть и абстрактный класс Stream, который мы не инстанциируем напрямую.
@blackbirdchannel-c7b
@blackbirdchannel-c7b 3 ай бұрын
Спасибо за хороший разговор
@oleksandrivashchenko7916
@oleksandrivashchenko7916 3 ай бұрын
Ждём грасп
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
Первая часть уже записана
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
Получаем GRASP
@RussellCrowe-rd5xi
@RussellCrowe-rd5xi 3 ай бұрын
Здравствуйте Тимур! Какую документацию по JS вы можете посоветовать новичку, MDN или же его аналог doka? Заранее признателен за ответ
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
MDN лучше всего
@RussellCrowe-rd5xi
@RussellCrowe-rd5xi 3 ай бұрын
@@TimurShemsedinov А стоит ли использовать learnJS для подготовки к собеседованиям к примеру, или это не надежный русурс?
@He1ss
@He1ss 3 ай бұрын
@@RussellCrowe-rd5xi learnJs прекрасный источник, с его помощью вы сможете успешно пройти любое интервью по javascript
@chikenmacnugget
@chikenmacnugget 3 ай бұрын
@@RussellCrowe-rd5xi лерн жс придурочный ресурс
@ЕгорЯкименко-п6м
@ЕгорЯкименко-п6м 2 ай бұрын
@@chikenmacnugget а почему, вроде ведь был не так плох?
@erjigit17
@erjigit17 3 ай бұрын
Звук, пожалуйста исправьте микрофон
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
А что не так со звуком?
@andreygazhala7577
@andreygazhala7577 3 ай бұрын
Всё ок со звуком
@TheLevius
@TheLevius 3 ай бұрын
@@andreygazhala7577 для уровня телефонного разговора да. Контента выходит много, а качество звука это важнейшая составляющая и за это время можно было бы озаботиться и вложиться в звуковуху и микрофон, а не сидеть с гарнитуры
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
@@TheLevius дело в том, что это семинар, а не контент, я вообще контент не выпускаю
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
Микрофоны rode и sennheiser на полочке стоят, но это не удобно и я не вижу разницы в звуке, на них и на pixel buds
@dimapopov5962
@dimapopov5962 3 ай бұрын
1:00 Немає інтерфейсів в JS.
@TimurShemsedinov
@TimurShemsedinov 3 ай бұрын
Те, що їх нема, це не не привід їх не використовувати
@1Malak16
@1Malak16 3 ай бұрын
Ахах) Эта пять
Officer Rabbit is so bad. He made Luffy deaf. #funny #supersiblings #comedy
00:18
Funny superhero siblings
Рет қаралды 9 МЛН
Офицер, я всё объясню
01:00
История одного вокалиста
Рет қаралды 3,7 МЛН
小天使和小丑太会演了!#小丑#天使#家庭#搞笑
00:25
家庭搞笑日记
Рет қаралды 15 МЛН
отомстил?
00:56
История одного вокалиста
Рет қаралды 7 МЛН
Приключения Node.js в продакшене
39:12
Yandex for Developers
Рет қаралды 10 М.
Стивен Уильям Хокинг. Теория всего. Происхождение и судьба Вселенной.
3:28:26
Читает Олег Лобанов | ≡ Аудиокниги
Рет қаралды 1,5 МЛН
Officer Rabbit is so bad. He made Luffy deaf. #funny #supersiblings #comedy
00:18
Funny superhero siblings
Рет қаралды 9 МЛН