214 похожих чатов

Товарищи, перечитал вторую статью от @eugene_matsyuk про Dagger 2, где

мы имели компоненты трех уровней: уровня приложения, межэкранные и одного экрана.

С компонентами уровней приложения понятно: создаем в Application и от туда штампуем синглтоны; компонент бессмертен (пока приложение живо). С уровнем экрана тоже ясно: компонент создаем в активности и используем только по графу зависимостей экрана (активность, презентер, локальные интеракторы); забываем компонент сразу после инициализации; никаких синглтонов, потому что они не нужны в пределах одного экрана.

А вот с межэкранными компонентами как? Они должны быть только для нескольких экранов и забыться, после смерти последнего экрана или стать фактичискими синглтонами уровня приложения. Как их правильно создавать и понимать? Я вижу два варианта:

1. Создаем в Application, там же и храним. Выходит, что это синглтон уровня приложения.
2. Контролируем, пока живы все экраны каким-нибудь счетчиком в том же Application с помощью Rx'a, a после смерти последнего экрана - обнуляем ссылки на компонент. Вариант костыльный (подписки/отписки) и какой-то неправильный.

Исходя из моих раздумий, я пришел к выводу, что межэкранные компоненты правильнее делать синглтонами уровня приложения и хранить в Application. Грубо говоря, это тот же AppComponent.

К какому способу идти и какой используете вы?

1 ответов

6 просмотров

Создаете синглтон а-ля ComponentManager, в котором у вас будут храниться ссылки на ваши компоненты (как глобальные, так и "локально" глобальные). Локально-глоабальный - это, например, SessionComponent. Когда "локально" глобальный компонент вам не нужен, например, вы вышли из сессии, то вы просто обнуляете ссылку на данный компонент в ComponentManager. И все дерево компонента становится доступно сборщику мусора. Снова стартуете сессию, снова создаете компонент и храните на него ссылку (ну и предостаавляете эту ссылку куда надо) в ComponentManager.

Похожие вопросы

Обсуждают сегодня

Типа вызывать GetParent и проверять на соответствие GetModuleHandle?
The Bird of Hermes
67
Do any of you guys have interesting projects one could join? I'm a Middle Full-Stack developer (JS/TS, React & Node)
Lev Shapiro
40
$res = json_decode($наша строка из респонса); $res1 = array_map(fn($o) => $o->name, $res->breadcrumbs[0]->entities); Как такое будет на Хаскеле?.. В начале весь джейсон, в ко...
Хаскель Моисеевич Гопник
27
В чем сила брат, в NASM или FASM?
Isaac Kleiner
18
Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
Хтось використовував Vapor на Windows?
Jaroshevskii
15
Тут кста кто-нибудь NeoVim использует?
Simple Sorcerer
13
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
52
у меня вопрос на счет .global <name> для чего это нужно если я пишу на ассемблере? только для того что бы сделать это видимым для линкера? вот что написано в докумментации GA...
Simple Sorcerer
1
Карта сайта