Информация об изменениях

Сообщение Re[3]: Как в C++ получить Redux и Redux Dev Tools от 11.01.2021 5:39

Изменено 11.01.2021 5:41 vsb

Re[3]: Как в C++ получить Redux и Redux Dev Tools
Здравствуйте, StandAlone, Вы писали:

SA>Это God-object, глобальная помойка, в которую свалено все состояние приложения. Буквально все, вплоть до того, какая кнопка кликнута в тот или иной момент и какая буква нажата пользователем в очередном инпуте.


Что в этом плохого? Я боюсь тебя огорчить, но в браузере window это тоже такой God-object, в который свалены все глобальные переменные. В Lua _G это тоже такой же God-object. Можешь считать это таким неймспейсом.

SA>На текущем проекте, примитивной учетной системе, это сейчас порядка 47-48 тысяч переменных. Хаотично разбросанных по от балды названным подобъектам, порядка 40 уровней вложенности.


И, конечно, в хаосе и названиях от балды виноват Redux, а не те, кто сделал этот хаос и называл от балды. Понимаю. Без Redux всё было бы по феншую и названия были бы совсем другие (нет).

SA>Есть глобальный обработчик событий, и на каждый чих, когда нужно изменить любую из переменных в глобальной помойке, туда отправляется сообщение с привязанными данными. В глобальном обработчике 47-48 тысяч условий break. Слепленных воедино из разных файлов, разумеется. Все эти условия будут опрошены на соответствие строковой константы сообщения условию брейка.


Есть такая структура данных под названием хеш-таблица. А ещё в JS каждая функция является значением. Т.е. ты можешь завести структуру вида handlers: Map<String, Function[]>. Структурированно её заполнить и обработка будет работать со сложностью O(1).

SA>Если таковое сработало, то весь глобальный объект пересоздается, ради изменения нажатой пользователем буквы или состояния кнопки.


И в этом нет ничего страшного, хотя звучит это страшно. По факту если твой глобальный объект организован в адекватное структурированное дерево, то пересоздаётся только путь от корня до нужного значения, который имеет длину O(ln N). Если это 40 уровней вложенности, то это пересоздание 40 хеш-таблиц в самом крайнем случае, каждая из которых имеет размер ну пусть максимум 100 объектов, а, скорей всего, подавляющее большинство будет иметь размер меньше 10. Это занимает микросекунды. Потратить несколько микросекунд на нажатие кнопки это не много.

SA>Это MFC 6.0 и WndProc, брошенные в кормушку жаваскриптерам.


Ничего общего.
Re[3]: Как в C++ получить Redux и Redux Dev Tools
Здравствуйте, StandAlone, Вы писали:

SA>Это God-object, глобальная помойка, в которую свалено все состояние приложения. Буквально все, вплоть до того, какая кнопка кликнута в тот или иной момент и какая буква нажата пользователем в очередном инпуте.


Что в этом плохого? Я боюсь тебя огорчить, но в браузере window это тоже такой God-object, в который свалены все глобальные переменные. В Lua _G это тоже такой же God-object. Можешь считать это таким неймспейсом.

SA>На текущем проекте, примитивной учетной системе, это сейчас порядка 47-48 тысяч переменных. Хаотично разбросанных по от балды названным подобъектам, порядка 40 уровней вложенности.


И, конечно, в хаосе и названиях от балды виноват Redux, а не те, кто сделал этот хаос и называл от балды. Понимаю. Без Redux всё было бы по феншую и названия были бы совсем другие (нет).

SA>Есть глобальный обработчик событий, и на каждый чих, когда нужно изменить любую из переменных в глобальной помойке, туда отправляется сообщение с привязанными данными. В глобальном обработчике 47-48 тысяч условий break. Слепленных воедино из разных файлов, разумеется. Все эти условия будут опрошены на соответствие строковой константы сообщения условию брейка.


Есть такая структура данных под названием хеш-таблица. А ещё в JS каждая функция является значением. Т.е. ты можешь завести структуру вида handlers: Map<String, Function[]>. Структурированно её заполнить и обработка будет работать со сложностью O(1).

SA>Если таковое сработало, то весь глобальный объект пересоздается, ради изменения нажатой пользователем буквы или состояния кнопки.


И в этом нет ничего страшного, хотя звучит это страшно. По факту если твой глобальный объект организован в адекватное структурированное дерево, то пересоздаётся только путь от корня до нужного значения, который имеет длину O(ln N). Если это 40 уровней вложенности, то это пересоздание 40 хеш-таблиц в самом крайнем случае, каждая из которых имеет размер ну пусть максимум 100 объектов, а, скорей всего, подавляющее большинство будет иметь размер меньше 10. Это занимает микросекунды. Потратить несколько микросекунд на нажатие кнопки это не много.

SA>Это MFC 6.0 и WndProc, брошенные в кормушку жаваскриптерам.


Ничего общего. React и Redux это уникальные технологии, не имеющие ничего общего в прошлом.