Size: a a a

2020 July 19

Б

Богдан in ☄️ effector
🅅aleriy 🄺obzar
и постоянно приводит к порождению костылей
На мой взгляд все эти observable в стиле rxjs имеют фундаментальный недостаток - там происходит замыкание переменных к которым нет доступа к извне (кстати с redux-saga то же самое так как там состояние замыкается в генераторах которых нельзя клонировать и сохранить в локалсторадж например).
На первый взгяд кажется удобным когда с этим rxjs демонстрируют пример drag-and-drop когда взяли стрим кликов замапили на mousemove и т.д но потом когда приложение развивается и становится более связанным по фичам оказывается нужно в другой части приложения узнать происходит ли в текущий момент драг.
Без rxjs проблема решается просто - ставим обработчик на mousedown и обновляем переменную isDrag и теперь доступ к этой переменной можно получить в любой другой части приложения.
А с rxjs получается уже нужно как-то связывать эти два стрима вместе потому что состояние было замкнуто в этих стримах. И чем больше будем добавлять фич тем больше нужно будет соединять стримы по всему приложению вместо того чтобы работать с состоянием через переменные
источник

🧙

🧙‍♂️🦹‍♂️🧜‍♂️🧞‍♂️... in ☄️ effector
Богдан
На мой взгляд все эти observable в стиле rxjs имеют фундаментальный недостаток - там происходит замыкание переменных к которым нет доступа к извне (кстати с redux-saga то же самое так как там состояние замыкается в генераторах которых нельзя клонировать и сохранить в локалсторадж например).
На первый взгяд кажется удобным когда с этим rxjs демонстрируют пример drag-and-drop когда взяли стрим кликов замапили на mousemove и т.д но потом когда приложение развивается и становится более связанным по фичам оказывается нужно в другой части приложения узнать происходит ли в текущий момент драг.
Без rxjs проблема решается просто - ставим обработчик на mousedown и обновляем переменную isDrag и теперь доступ к этой переменной можно получить в любой другой части приложения.
А с rxjs получается уже нужно как-то связывать эти два стрима вместе потому что состояние было замкнуто в этих стримах. И чем больше будем добавлять фич тем больше нужно будет соединять стримы по всему приложению вместо того чтобы работать с состоянием через переменные
Это не недостаток, это фп
источник

З

Завтра in ☄️ effector
🧙‍♂️🦹‍♂️🧜‍♂️🧞‍♂️
Это не недостаток, это фп
штош
источник

NF

Nikita Fedorov in ☄️ effector
Богдан
На мой взгляд все эти observable в стиле rxjs имеют фундаментальный недостаток - там происходит замыкание переменных к которым нет доступа к извне (кстати с redux-saga то же самое так как там состояние замыкается в генераторах которых нельзя клонировать и сохранить в локалсторадж например).
На первый взгяд кажется удобным когда с этим rxjs демонстрируют пример drag-and-drop когда взяли стрим кликов замапили на mousemove и т.д но потом когда приложение развивается и становится более связанным по фичам оказывается нужно в другой части приложения узнать происходит ли в текущий момент драг.
Без rxjs проблема решается просто - ставим обработчик на mousedown и обновляем переменную isDrag и теперь доступ к этой переменной можно получить в любой другой части приложения.
А с rxjs получается уже нужно как-то связывать эти два стрима вместе потому что состояние было замкнуто в этих стримах. И чем больше будем добавлять фич тем больше нужно будет соединять стримы по всему приложению вместо того чтобы работать с состоянием через переменные
Никто не мешает тебе сделать тоже самое с rx, так сказать поднять состояние)
источник

AT

Alexey Tuychiev in ☄️ effector
Богдан
На мой взгляд все эти observable в стиле rxjs имеют фундаментальный недостаток - там происходит замыкание переменных к которым нет доступа к извне (кстати с redux-saga то же самое так как там состояние замыкается в генераторах которых нельзя клонировать и сохранить в локалсторадж например).
На первый взгяд кажется удобным когда с этим rxjs демонстрируют пример drag-and-drop когда взяли стрим кликов замапили на mousemove и т.д но потом когда приложение развивается и становится более связанным по фичам оказывается нужно в другой части приложения узнать происходит ли в текущий момент драг.
Без rxjs проблема решается просто - ставим обработчик на mousedown и обновляем переменную isDrag и теперь доступ к этой переменной можно получить в любой другой части приложения.
А с rxjs получается уже нужно как-то связывать эти два стрима вместе потому что состояние было замкнуто в этих стримах. И чем больше будем добавлять фич тем больше нужно будет соединять стримы по всему приложению вместо того чтобы работать с состоянием через переменные
Выноси в сервис который отвечает за drag-and-drop
источник

🅅🄺

🅅aleriy 🄺obzar in ☄️ effector
Богдан
На мой взгляд все эти observable в стиле rxjs имеют фундаментальный недостаток - там происходит замыкание переменных к которым нет доступа к извне (кстати с redux-saga то же самое так как там состояние замыкается в генераторах которых нельзя клонировать и сохранить в локалсторадж например).
На первый взгяд кажется удобным когда с этим rxjs демонстрируют пример drag-and-drop когда взяли стрим кликов замапили на mousemove и т.д но потом когда приложение развивается и становится более связанным по фичам оказывается нужно в другой части приложения узнать происходит ли в текущий момент драг.
Без rxjs проблема решается просто - ставим обработчик на mousedown и обновляем переменную isDrag и теперь доступ к этой переменной можно получить в любой другой части приложения.
А с rxjs получается уже нужно как-то связывать эти два стрима вместе потому что состояние было замкнуто в этих стримах. И чем больше будем добавлять фич тем больше нужно будет соединять стримы по всему приложению вместо того чтобы работать с состоянием через переменные
а что мешает подписаться на соответствующий стрим и получать эту информацию в нужном месте?
источник

NF

Nikita Fedorov in ☄️ effector
🅅aleriy 🄺obzar
а что мешает подписаться на соответствующий стрим и получать эту информацию в нужном месте?
То что он может быть ниже по дереву либо в другой ветке
источник

NF

Nikita Fedorov in ☄️ effector
Это решается упаковкой в пустую функцию наблюдаемого выше по дереву. И распаковкой там где надо. Это не вызывает лишних пересчетов и связывает параллельные ветви вычислений.
источник

NF

Nikita Fedorov in ☄️ effector
Сервисы нужны чтобы обрабатывать состояния а не хранить.
источник

NF

Nikita Fedorov in ☄️ effector
Вы знаете что делать. И как правильно. А теперь я иду спать))
источник

Б

Богдан in ☄️ effector
🅅aleriy 🄺obzar
а что мешает подписаться на соответствующий стрим и получать эту информацию в нужном месте?
я не про конкретный пример, я про тенденцию. С rxjs у нас нет прямого доступа к состоянию и придется мерджить стрим drag&drop-а c другой фичей которой потребовалось состояние isDrag.
А теперь если подумать про действительно масштабные spa приложения где большое количество фич то каждая новая фича будет иметь тенденцию связываться с другой (заказчик такой - вот хочу здесь показать что-то в зависимости от того и того и того ...)
И получается что мы вынуждены будем постоянно связывать эти стримы вручную вместо того чтобы просто обращаться к переменным в апп-сторе
источник

AT

Alexey Tuychiev in ☄️ effector
Nikita Fedorov
Сервисы нужны чтобы обрабатывать состояния а не хранить.
Ну зачем такие крайности, сервисы могут быть stateful.
источник

NF

Nikita Fedorov in ☄️ effector
Alexey Tuychiev
Ну зачем такие крайности, сервисы могут быть stateful.
Есть две книжки красная и синяя, в обоих написано как делать правильно и почему. Сервисы с состоянием это не правильно.
источник

NF

Nikita Fedorov in ☄️ effector
голубая*
источник

🅅🄺

🅅aleriy 🄺obzar in ☄️ effector
Богдан
я не про конкретный пример, я про тенденцию. С rxjs у нас нет прямого доступа к состоянию и придется мерджить стрим drag&drop-а c другой фичей которой потребовалось состояние isDrag.
А теперь если подумать про действительно масштабные spa приложения где большое количество фич то каждая новая фича будет иметь тенденцию связываться с другой (заказчик такой - вот хочу здесь показать что-то в зависимости от того и того и того ...)
И получается что мы вынуждены будем постоянно связывать эти стримы вручную вместо того чтобы просто обращаться к переменным в апп-сторе
так не бывает
источник

🅅🄺

🅅aleriy 🄺obzar in ☄️ effector
фичи они обычно отдельно друг от друга
источник

🅅🄺

🅅aleriy 🄺obzar in ☄️ effector
и если между ними нужна тесная связь или взаимодействие, то это заранее надо предусматривать
источник

🅅🄺

🅅aleriy 🄺obzar in ☄️ effector
на стадии проектирования архитектуры и моделей
источник

🅅🄺

🅅aleriy 🄺obzar in ☄️ effector
внезапно вдруг и ниоткуда редко такие проблемы возникают
источник

🅅🄺

🅅aleriy 🄺obzar in ☄️ effector
собственно в данном случае конкретном с d&d как мне кажется эта фича должна иметь интерфейс в виде стрима на который можно подписаться извне, для получения ее состояния
источник