Глобальное состояние приложения - хорошая ли идея?
От: Shmj Ниоткуда  
Дата: 06.09.25 02:54
Оценка:
Вот, обычно работаю с бекэндом, но последние несколько месяцев завязался с приложением Flutter — т.е. фактически это фронт.

И как-то такая хорошая мысля пришла опосля — а было бы здорово иметь единственный глобальный объект, который представляет весь срез данных (текущий) для UI. Т.е. все те данные, которые могут быть видимы пользователем через формы. При этом часть данных может быть не загружена и т.д.

Начал делать стандартным способом через flutter_bloc — много отдельных объектов состояний — для каждой формы свое состояние (а то и несколько для разных частей формы). И глобально они никак не объединены. Якобы считается что это лучше, т.к. божественный объект (God object) это плохо.

Но на самом деле понял как было бы здорово иметь единый объект структурированный, который отображает все UI — все возможные открытые формы (если не открывали или закрыли навсегда — то конкретное поле пустое).

Сначала показалось плохой идеей, вроде там много всего будет. А на самом деле не так много. Вот даже на примере этого сайта — много ли тут форм? Всегда будет одна и только одна форма для отображения списка сообщений (если открываем новую вкладку/окно — то это отдельный объект состояний а новое сообщение пишем в той же вкладке). Всегда будет одна и только одна форма для отображения текущего сообщения.

Т.е. фактически ну пусть даже 25 полей будет в этом классе (дерево список форумов, текущий форум, текущий список сообщений, текущее сообщение и т.д.). 25 это не много. Да даже 50 полей не много, и 100 норм. Но это очень очень редко какая прога будет иметь так много форм разных типов, скорее будет всего 10-15 полей в среднем (естественно — внутри них свои сложные объекты или списки таких объектов).

Плюс этого всего: сразу видна структура данных приложения. И когда одни данные связаны с другими — ты сразу в одном месте это видишь и можешь обновить связанные данные.

Естественно в состоянии нет ничего связанного с UI — ни виджетов ни вспомогательных UI-текстов.

Минус кажущийся — что много данных будет в этом объекте. А на самом деле нет — даже 1 Мб. редко будет (а что такое 1 Мб для современного телефона даже с минимумом 4 Гб. ОЗУ). Данных много не будет, т.к. храните только текущий срез как бы, текущую одну страницу, которую видит пользователь. То что уже не актуально — подчищаете.

Плюс — у вас как бы справочник всех данных, которые могут быть и связаны и изменение одного требовать обновления другого. Все как на ладони как бы.

Применяете ли? Думали ли об этом?
=сначала спроси у GPT=
Отредактировано 06.09.2025 3:10 Shmj . Предыдущая версия . Еще …
Отредактировано 06.09.2025 3:09 Shmj . Предыдущая версия .
Отредактировано 06.09.2025 3:07 Shmj . Предыдущая версия .
Отредактировано 06.09.2025 3:05 Shmj . Предыдущая версия .
Отредактировано 06.09.2025 2:55 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.