Александр
А JS впринципе работает на паттерне прототип
Denis
🏴☠️
Denis
Denis
🏴☠️
Denis
Александр
Вот такую фигню писали некоторые, вместо того чтобы нормальную либу взять)
Denis
Denis
Декоратор сначала выполняет действие, а к результату добавляет что-то своё
Denis
А прокси перехватывает вызов как сделано у тебя
Denis
Не класс Proxy, а паттерн
Denis
У тебя как миддлварь почти работает
Denis
На самом деле, если делать чисто на классах прилку, то типизации конструктора достаточно. Даже и она не нужна нафиг, если честно. Комменты по JSDoc пиши и фсё
Александр
Так это не декоратор, а прокси
ок, спускаемся в детали.
Что есть прокси а что есть декоратор?
Если примитивным языком, то прокси нужен для контроля состояния без изменения в интерфейсе объекта, а декоратор добавляет новый функционал к объекту.
В данном случае это декоратор. Он не контролирует состояние, а добавляет функционал для указанной в параметре функции
Александр
Делает обертку над функцией
Si 🫧
Блин работа так прокачивает. Не понимаю, как можно было так долго сидеть и пилить простые пет проекты
Александр
Александр
Я на него тоже в свое время плевался, но в итоге сейчас даже свои пет-проекты с ним пилю
Denis
Декораторы работают с результатом выполнения
Denis
А не с входными данными
Denis
Denis
НЕ ДО
Александр
НЕ ДО
после инициализации функции, но до ее выполнения
Denis
Инициализации? Это как?
Александр
const someFunc = ()=>{} - проинициализировали someFunc
decorate(somFunc) - добавили кода поверх someFunc
proxy(someFunc) - подписались на какие-либо изменения someFunc
И decorate и proxy, если прям грубо, добавляют код поверх функции. Вот только делают они это по разному.
Denis
Декоратор имеет альтернативное название — обёртка. Оно более точно описывает суть паттерна: вы помещаете целевой объект в другой объект-обёртку, который запускает базовое поведение объекта, а затем добавляет к результату что-то своё.
Оба объекта имеют общий интерфейс, поэтому для пользователя нет никакой разницы, с каким объектом работать — чистым или обёрнутым. Вы можете использовать несколько разных обёрток одновременно — результат будет иметь объединённое поведение всех обёрток сразу.
Александр
proxy используют для объектов, а декораторы чаще для функций
Denis
Функция это и есть объект
Александр
в js да
Александр
мы вообще про теорию
Александр
Ну я покрайней мере
Denis
А в теории это паттерны ООП и применимы только к функциям (классам)
Александр
Александр
Denis
Denis
Это частный случай функции
Александр
object oriented
и паттерны для работы с объектами
Александр
Хотя реализация идет через функции, классы и другие структуры языков
Denis
Denis
Просто так объектов не бывает в ООП
Denis
Только в виде инстансов класса (функции-конструктора)
Александр
Denis
Александр
Denis
Тому что паттерны для работы только с объектами. С созданием объектов (то есть функциями) тоже идёт работа. Возьми хотя бы композицию. Не бывает композиции объектов, это про функции
Александр
Denis
Немного другие
Александр
Александр
ну вот часть тех же самых в статье например https://dev.to/patferraggi/do-you-need-design-patterns-in-functional-programming-370c
Александр
Кидаю статьи, тк самому долго и нудно писать
Александр
Я бы сказал так, не все применимы и есть некоторые свои.
Но не так что немного другие вовсе
Denis
Я бы назвал это техниками. Они более низкоуровневые и участвуют в создании паттернов. Каррирование, композиция и тд
Denis
Denis
К тому же сайт этот говно. Большинство статей написано индусами с двумя репо на гх
Denis
За испанца ничего не скажу
Александр
Ладно, понятно, докапывайся дальше)
Главное чтобы результат был)
Александр
Даже если мы выясним, что в той реализации это был прокси, а не декоратор, то ситуации это не измениит, тк обсуждали мы вообще другое.
Я вижу что тебе просто докопаться охота и скучно. Так что я отваливаю, нет больше желания поддерживать пустой треп по теории
Denis
https://codesandbox.io/s/cold-firefly-d77ieh?file=/src/store/index.ts
строка 10
метод на строке 24
Можешь описать их предназначение?
Denis
Denis
Точнее смысл типизировать там
Denis
Кстати, я там часть типизации пропустил, ибо не работало
Александр
Denis
Строка 10 что делает вообще?
Denis
Denis
Я бы на JS лучше накатал
Denis
Часа три бы сэкономил. Мистер кстати мне помогал с этим
Denis
Ещё бесит что d.ts файлы попадают в глобальную область. В целом ТС — это кладезь хуёвых практик
Denis
Denis