💻 GRASP: принцип информационный эксперт с адаптацией для JavaScript и Node.js

  Рет қаралды 8,062

Timur Shemsedinov

Timur Shemsedinov

Күн бұрын

Пікірлер: 47
@andrii_suprun_ua
@andrii_suprun_ua 2 жыл бұрын
Почему я раньше Вас не смотрел) Как рад что такие люди существуют! Будьте здоровы)
@sromankov6102
@sromankov6102 3 жыл бұрын
Отличный контент, было бы здорово по gof паттернам такое видео
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
Следующий курс лекций будет по SOLID, а по GoF уже частично есть, но там же много, я буду продолжать
@serebniti
@serebniti 3 жыл бұрын
@@bmarvinb не ждем а готовимся
@raman9359
@raman9359 3 жыл бұрын
Ништяк, видео Тимура можно ставить лайк до просмотра
@krusso3295
@krusso3295 2 жыл бұрын
"Ми дотримуємось контрактів завдяки силі волі!". Дуже влучно, не втримався, сміявся)))) Дякую!
@404Negative
@404Negative 2 ай бұрын
- какая у вас типизация: динамическая или статическая ? - тибетская
@ruslanshikhaliev9341
@ruslanshikhaliev9341 Жыл бұрын
Здравствуйте. Пока досмотрел до примера с RingBuffer, решил попробовать. Сначала написал на простом массиве, потом с использованием Buffer. Также посмотрел пример из репозитория, увидел slice и подумал почему тут не использовать простой цикл как в примере ниже, затем решил залезь в buffer.js (в ноде), увидел что там с помощью сдвигов запись происходит, если правильно понял, а это быстрее итераций. Затем решил протестить ваш вариант и на больших входных данных конечно же словил переполнение стека. Тут должно быть какое то резюмирование, но я скажу лишь то, что из за этого простого примера впервые залез в кишки node.js). Я из фронтенда, хочу разбираться больше и снова смотрю ваши видео)) Вот то, что я написал и протестил class RingBuffer { constructor(size = 10) { this.size = size; this.buffer = Buffer.alloc(size); this.offset = 0; } write(data) { for (const char of data) { if (this.offset >= this.size) { this.offset = 0 } this.buffer[this.offset] = char.charCodeAt(0) this.offset += 1 } } read() { return this.buffer.toString('utf8') } } const buffer = new RingBuffer(10) buffer.write('1234') buffer.write('7890A') buffer.write('BC') buffer.write('1') console.log(buffer.read())
@ivanfedorov7934
@ivanfedorov7934 3 жыл бұрын
Огромнейшее спасибо за вашу работу, ждём с нетерпением продолжения
@TheTexPro
@TheTexPro 2 жыл бұрын
Спасибо большое! Этот принцип напоминает "солидовский" single resposibility, где также следует связанную логику сущности хранить в одном месте (внутри) и не патчить абы где удобно)
@TimurShemsedinov
@TimurShemsedinov 2 жыл бұрын
Напоминает, но вывернуто с другой стороны, если в солиде SRP говорит о том, что не должно быть двух разных причин к исправлению класса, а грасповский IE - говорит о том, что если у класса есть состояние, то и поведение должно быть в нем, чтобы ближе было обращаться к состоянию.
@pluto2656
@pluto2656 3 жыл бұрын
Теперь буду JS называть - язык программирования с силой воли)
@404Negative
@404Negative 2 ай бұрын
сила воли ориентированный
@artem_travlo
@artem_travlo Жыл бұрын
Все понятно.
@ViktorKishankov
@ViktorKishankov 3 жыл бұрын
Спасибо за вашу работу! очень интересные лекции.
@ОлегПетров-п4у
@ОлегПетров-п4у 3 жыл бұрын
Спасибо за уроки!
@serebniti
@serebniti 3 жыл бұрын
Тимур лучший!
@wonderman9027
@wonderman9027 3 жыл бұрын
Здравствуйте, скажите, можно ли реализовать websocket на node js на стороне сервера нативными способами или нативным api ? Без использования всяких socket.io, или все таки лучше использовать готовую библиотеку такую как socket.io ?
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
Лучше всего использовать библиотеку ws: www.npmjs.com/package/ws
@keksinjo
@keksinjo 2 жыл бұрын
soket.io это не чистые вебсокеты, вроде как эта штука переключатется между разными протаколами, в зависимости от доступности и иногда работает через polling
@wonderman9027
@wonderman9027 2 жыл бұрын
@@keksinjo long polling работает, если браузер или сервер не поддерживает ws
@Михайло-р9р
@Михайло-р9р 3 жыл бұрын
Здравствуйте) скажите пожалуйста что думаете о typescript? Стоит ли изучать ? Спасибо
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
Изучать - да, а использовать - нет
@serebniti
@serebniti 3 жыл бұрын
@@TimurShemsedinov о как! Гуру ! Расскажите почему? fastify пилиться на поддержку ts, vue тоже.
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
@@serebniti тайпинги добавляют только
@sas31a
@sas31a 3 жыл бұрын
@@TimurShemsedinov а можно более развернутый ответ или ссылку на почитать, и спасибо за ваш труд
@keksinjo
@keksinjo 2 жыл бұрын
@@sas31a добавляется только статический анализ, больше в общем-то ничего. Ну кроме этого ts не избавляет от головной боли с типами, если кто-то использует as или any. И например есть трудности при взаимодействием с разными API и описанием типов. а вообще лично мне ts нравится просто потому что IDE подсказки дает
@pluto2656
@pluto2656 3 жыл бұрын
Сила воли)
@ВладКосмач-м3ю
@ВладКосмач-м3ю 3 жыл бұрын
Молодец, крутой курс! Только терминальный кодинг)) А это vim?
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
Это mcedit из midnight commander
@404Negative
@404Negative 2 ай бұрын
20:16 это не процедурное программирование, потому что функции возвращают значения
@MrEzheniko
@MrEzheniko 3 жыл бұрын
дякую
@ermakamre
@ermakamre 3 жыл бұрын
Чтобы программировать на JavaScript нужно много силы воли! Это не C# какой-нибудь!
@RedkeiGost
@RedkeiGost 2 жыл бұрын
Причем ослабление силы воли приводит к большей гибкости языка. В стародавние времена, когда еще нельзя было настройти подлинно-приватные поля в жабаскрипте, читал я на хабре заметко о том, что это гибкий язык и поэтому в нем есть все, даже приватные поля. Надо сделать нижнее подчеркивание и просто не изменять поле с нижним, и тогда они будут приватные, гибкий язк, сила воли.
@TimurSevimli
@TimurSevimli Жыл бұрын
@@RedkeiGost Вообще то когда не были приватные поля которые через решетку обявляются, все таки были способы с которыми можно достигнуть одного и того же эффекта. Например можно их в замыкание класть либо поля конструктора обявить через Object.defineProperty с enumerable: false и вот вам приватные поля
@404Negative
@404Negative 2 ай бұрын
@@TimurSevimli enumerable: false не запрещает доступ к проперти
@sergioostanioni5390
@sergioostanioni5390 3 жыл бұрын
Здравствуйте. Что за редактор такой?
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
mcedit. Это из midnoght commander
@404Negative
@404Negative 2 ай бұрын
rest это не оператор
@vitiok78
@vitiok78 3 жыл бұрын
Я считаю, что для того, чтобы никто не лазил в такие вот поля снаружи, можно вообще даже договориться не использовать геттеры и сеттеры (ненавижу магию), а делать их явно в виде методов getSomething() и setSomething(value). Явное всегда лучше магии.
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
Ну если геттеры магия, то так можно к магии причислить и Prpxy, Reflect, Object.defineProperty, setPrototypeOf, симвллы и итераторы, замыкания и частичное применение, да пол языка так можно отбросить... сила js в том, чтобы создавать выразительные синтаксисв и конструкции, а не пуристически стройные.
@KopoLPedov
@KopoLPedov 3 жыл бұрын
непонятно только чем геттеры и сеттеры принципиально отличаются от getSomething() и setSomething(value), в них точно так же можно оставить ссылки до приватных данных (и наоборот, можно в геттерах/сеттерах ссылки обрубать)
@vitiok78
@vitiok78 3 жыл бұрын
@@KopoLPedov Вопрос не в возможности достучаться. Вопрос в том, что если мы договариваемся использовать только методы, то никто не будет лазить внутрь. Просто гигиена.
@vitiok78
@vitiok78 3 жыл бұрын
@@TimurShemsedinov Такие простые операции с объектами происходят на порядки чаще, чем всё то, что вы описали. Они обыденны. Из-за этого вероятность ошибки просто статистически выше. Тип any в Typescript ведь тоже не зря существует. Но когда ты видишь использование any, это означает, что тут какая-то особенная логика, и ты более внимательно изучаешь, что тут происходит. А простые обращения к объектам проходишь глазами по диагонали...
@TimurShemsedinov
@TimurShemsedinov 3 жыл бұрын
@@vitiok78 лучше не any, а unknown
Disrespect or Respect 💔❤️
00:27
Thiago Productions
Рет қаралды 26 МЛН
When u fight over the armrest
00:41
Adam W
Рет қаралды 19 МЛН
G.R.A.S.P | шаблоны проектирования
12:09
💻 Асинхронный пул для worker thread pool в Node.js
28:25
Disrespect or Respect 💔❤️
00:27
Thiago Productions
Рет қаралды 26 МЛН