Oleg
Не то чтобы он победил
Дима
Юзаешь бовер?)
Oleg
Я в том плане что фреймворки есть и будут
Дима
Они на задворках индустрии
Oleg
Но это не значит что нельзя допилить функциональность под себя пакетами
Rafael 🌵
Вместе с нетфликсом, фейсбуком, твиттером и аирбнб ;)
Бандеролька, китайская ele уже используют вью
Дима
Ангуляр — обязательная альтернатива, чтобы у людей был выбор. Собственно, на этом из фреймворков всё
Rafael 🌵
Вообще в азиатских странах вью довольно популярный
Дима
Потому что развивается на бабло алиэкспресс
Oleg
Выбирается часто основа, а потом уже бонусом пакетами. И ещё я знаю тех кто пишет всё-равно под себя в своей корпорации свои фреймворки и они не умрут долго потому что легаси, но мне их в чем-то жаль конечно ибо это же нужно свои силы для поддержки своего постоянно тратить
Дима
Ага
Дима
Я в принципе про это, да) Фреймворки сменили экосистемы
Rafael 🌵
Надо зафиксировать, что Канистра континуума утверждает, что вью не жилец
Rafael 🌵
Наториалтно заверить
Дима
Я нигде не говорил, что он не жилец
Дима
Влачить можно очень долго
Дима
Но лучше ужасный конец, чем ужас без конца
Rafael 🌵
Но лучше ужасный конец, чем ужас без конца
Двусмысленно, очень двусмысленно
Oleg
Деньги увы всё-равно решают, как только что-то становится популярным - так туда заходят корпорации. Пиарят свой стек чтобы облегчить поддержку за счет опенсорса, иногда зарабатывают и на обучении и всем таком, но тем не менее если этот стек юзается лично у них - им выгодно рекламировать продукты. В то что известо - заходят много людей, в итоге популярность и тп. Вообще тот же реакт и ангуляр живут достаточно давно по меркам JS и ещё не превратились в полумертвый легаси, всё бодро и тп.
Oleg
А Васю Пупкина, который сделал суперудобный фреймворк, уже забыли, причем дважды
Rafael 🌵
Уже давно не в дел вакансия под него
Oleg
Второй-Третий-Четвертый зато есть
Oleg
Но переход на 2 версию был не простым, да
Oleg
Я условно
Oleg
Гугл взял идею Майкрософта с нумерацией, да
Rafael 🌵
Гугл взял идею Майкрософта с нумерацией, да
Кстати, покажи пример нормального дата биндинга на jQuery
Oleg
У меня не то чтобы там реалтайм обновление быстрое, статик данные, обновляемые по каким-то событиям и действиям юзера, разве что чат динамичный есть. Потом как допишу - может быть выложу на почитать в опенсорс
Oleg
Но никакого волшебства быть не может - ибо если шаблоны там какие или типа того - это либо нужно чтобы генерилось всё на основе компонетов в рантайм, либо парсинг страницы на момент вставок по каким-либо правилам шаблонизатора
Oleg
Когда у тебя этого нет - есть просто олдскульный способ - биндинг по айди элементов. Итого есть у тебя статик верстка, помеченная везде где можно через айди, а в коде просто сначала получение по селекторам всего что нужно, а потом уже логика на основе этого всё и обновление просто методом получения элемента и записи туда данных.
Oleg
Есть есть хренолион таких мест и всё очень прям динамично то прям вообще - тогда нужно брать конечно инструмент поинтереснее чтобы избавиться от кода, который из раза в раз нужно повторять
Oleg
Когда его не много - это быстро и эффективно, когда много - закопаешься в коде, итого можно ужать количество строк раза в два перенеся логику в шаблонизатор, итого некий скрипт собирает данные и рендерит, биндит и тп по нужным правилам, привет ангулярам первым и тп
Oleg
А когда хочется общаться с элементами страницы как с компонетами в объектно-ориентированном стиле и тп - тогда рождаются компонентные фреймворки, там ты не только не тратишь время на код для биндингов и всяких стандартных операций, но и ещё можешь взаимодействоватьс компонентами в более интересном виде, ООП или каком пожелаешь, а рендеринг на клиенте дает возможность ещё и гибко всё это делать
Oleg
Но также нет никакого тайного волшебства - просто вводится ещё 1 код, который обрабатывает уже компоненты
Дима
Ох уж етот олдскульный императивный жс
Oleg
Решил вспомнить самое начало, да
Oleg
:D
Oleg
В ExtJS вон вообще всякие там сторы, у которых есть прокси, есть ещё несколько там слоев обмена данными, также отдельная абстракция с эвентами, эвент-домены там, потоки эвентов направлять там, пропускать через себя их, 100500 методов для простой кнопки чтобы сделать с ней вообще всё что угодно что хоть когда-то может пригодится и одним методом, а также отдельный биндинг стилей, темы с наследованием и ещё 100500 всего. Просто в 1 момент решили биндинг, да, удобно, давайте компоненты, удобно, да, хм, давайте в сеть ходить через отдельный слой абстракции, а там ещё и ещё слои, а теперь объекты начнут общаться как в истинном ООП через асинхронные эвенты и пошло поехало.
Oleg
Полюбому в какой-то момент веб расслоится на несколько слоев со своими там скопами и предназначенными для своих дел
Oleg
Хотя это может остаться и на программном уровне в рамках фреймворков или библиотек, да
Oleg
Вообще императивность хороша когда что-то такое делается под конкретную задачу и никуда больше.
Oleg
Главное понять что эта задача - эта самая
Oleg
И это не значит что нужно писать плохой код, но значит что можно писать код решающий исключительно конкретный набор задач
Дима
reactive programming тоже под капотом на них основан
Дима
С них главное вовремя соскочить))
Oleg
Там с этой темой конкретно развили всё. Каждый компонет может файрить эвенты, может слушать их, может проксировать их от других, что актуально для больших компонентов, состоящих из множества малых. Например есть условно таблица, снизу 2 кнопки управляющие. Можно на них подписаться, но всё-таки кнопки жестко привязаны к логики таблицы - лучше всё это в 1 компонент оформить и проксировать эвенты нажатия на кнопки через единый интерфейс и дать какие-нибудь более интерсные имена им, add-line и remove-line например.
Дима
ну вот с момента "проксировать" они и покатились
Дима
Это ложная абстракция
Oleg
Далааадна
Дима
Да
Oleg
Я же описал как и почему
Oleg
Это же абстракция, как модульность, только для потока эвентов
Oleg
Паттерн "фасад" же
Дима
Вот, да, я про то же
Дима
по прежнему ложная абстракция.
Дима
Это не прокси, это просто stream.map(transformFn)
Дима
Который возвращает новый стрим
Oleg
Нет, абстракция обусловленная необходимостью
Дима
я описал решение без абстракции
Oleg
Ибо иначе это будет ад
Дима
Один метод, одна функция, один новый объект
Дима
А у них что?
Oleg
Не понял про что ты со стримом
Дима
Я описал, как выглядит это решение если не упарываться ооп)
Oleg
У тебя есть некоторый большой объект, не нужно знать людям приватные компоненты внутри ибо там своя логика, а ты обращаешься к самому компоненту и слушаешь конкретно его эвенты. Например компонент может не дать удалить элемент в таблице по кнопке удалить по какаким-то конкретным обоснованным причинам - так и нечего выпускать эвент нажатия наружу
Дима
stream — поток эвентов, "прокси" твой — это просто функция, каким либо образом преобразующая этот поток. Возвращает новый экземпляр стрима
Дима
нет никакого "наружу", у компонента есть просто объект stream
Oleg
Что-то мы похоже про сильно разное
Дима
Лол, вот самое смешное, что нет
Дима
Но то, что в ооп решают чудовищным набором слоев абстракций — делается парой функций
Дима
Концепция reactive — это декларативный путь объявления твоих императивных абстракций. Честно, это все правда делается парой функций
Дима
В этом трагедия ооп)) Строили-строили, а в результате — пшик, десятилетие заблуждений
Oleg
Короче, есть компонент "таблица с кнопками", внутри есть компоненты "таблица", "тулбар", в нем кнопки "добавить строку", удалить строку". Компонент "таблица с кнопками" инкапсулирует всё внутри. Он подписан на события нажатия на соответствующие кнопки. По соответствующему эвенту происходят какие-то действия и в зависимости от результата - эвенты с новым именем файрятся от имени компонента "таблица с кнопками". Итого мы имеем единый программный интерфейс к этому компоненту и не лезем в механику внутри. Однако может быть причина просто пробросить эвент изнутри, вообще ничего не меняя, за исключением того что он будет от имени компонента. Допустим есть тулбар, в нем кнопка и поле ввода, мы можем тулбаром читать эвенты кнопки и поля ввода и пробрасывать их от имени толбара. Но не GUI единым - хранилища данных могут файрить эвенты например по факту добавления новых данных или синхронизации с сервером.
Дима
Ты описываешь требовния, не реализацию
Oleg
Реши мне проблему с "таблица с кнопками" по своему
Oleg
Реализация вроде же не звучит сложной, хранилище подписчиков и всё такое
Дима
Тебе сейчас почему то кажется что я тебе рассказываю про клингонский
Дима
Я просто сообщаю как факт, что в данном подходе есть некоторые шаблоны, которые люди уже обобщили, и все эти велосипеды из прокси — уже давно solved problem