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

Вот Я работаю с фотками. По факту сохранить в память

Я могу только там где есть контекст (Активити, Фрагмент). Если Я хочу это делать из ВМ, то мне надо туда пробрасывать контекст и делать AndroidVM. А если Я хочу это делать из репозитория? Мне и туда как-то пробрасывать контекст? Могу ли Я без каких-то проблем с точки зрения андроида и проблем с точки зрения "чистой архитектуры" просто при старте приложения в активити создать свою папку, и сохранить ее путь в какой-то объект-утилиту?

32 ответов

4 просмотра

Во VM в целом не так страшно. Хотя можно и без этого обойтись насколько я помню

Ilia-Gaevskii Автор вопроса

А в репозитории? И буду рад ,если сможете ответить на другие вопросы..

В репозитории контекст не должен быть. Он работает с бд и сетью, а не с памятью устройства

В репозитории так себе идея хранить контекст, Потому что это уровень логики приложения и там хранятся логики и взаимодействия, Но твой вопрос вообще интересный, надо покумекать, потому что сохранение файла я разумеется делал, но довольно давно и не помню уже какая реализация была, стукни мне в личку я посмотрю в течение дня и постараюсь тебе скинуть Там я просто помню, что были какие-то подводные камни, но хоть убей не помню какие уже

Ilia-Gaevskii Автор вопроса

А если Я хочу из сети сохранить в память телефона?

Разделяй уровни ответственности. Например, один уровень ходит в сеть и что-то возвращает, а другой эти данные умеет записывать. Не вали всё в одну кучу.

Этим занимается отдельный класс

Сори что влезаю, а почему бы не сделать некую обертку, по типу как ResourceProvider, тока назвать допустим FileManager и его иплементация будет содержать контекст и сохранять фото/файл и тд?

Во точно) так и сделано у меня было )

Ilia-Gaevskii Автор вопроса

То есть по факту, создать какой-то синглтон, в котором у меня будет работа с фотками, и в котором будет контекст?

Да

У тебя di настроен в проекте?

Ilia-Gaevskii Автор вопроса

Да , Коин

Не синглтон точно. инжектится там где нужно каждый раз новый инстанс Хотя если applicationContext, то можно и singleton Смотри главное, чтоб активити контекст или ui context не утек в синглтон (Поэтому собственно и опасно контекст использовать вне фрагментов и активти)

А, коин, там скоупы есть вообще ?

Ilia-Gaevskii Автор вопроса

Да, но контекста нет

Я видел часто в проектах, что делают AndroidModule в дагере и провайдят контекст. Но эта ведь та же утечка, если помечают какой то AppScope анотацией?

Нет, если у тебя applicationContext, он ведь живет пока живет приложение

Так утечка может быть разве вне жизни приложения?)

Нет

Application Context It is an instance that is the singleton and can be accessed in activity via getApplicationContext(). This context is tied to the lifecycle of an application. Не может быть

Нет, говорю в общем, если хранить просто ссылку на контекст в репозитории

Но лучше, если доменная логика не знает ничего или знает по минимум об андроид классах, как-то раз был у меня случай, когда приходилось поддерживать одновременно андроид + десктоп на jvm и там в domain не было никаких андроид классов вообще

А куда его инжектят? В вм? Вм как бы в презентейшн слое находится, но не помню чтобы она знала о UI или лайфсайкл компонентах

В вм инжектить контекст нет смысла, есть AndroidViewModel

А контекст он откуда берет? Из приложения?

Аппликейшнконтекст?

В каком смысле?

Сам application имел ввиду

Делается синглтон и туда инжектится appContext. А в vm можно использовать этот класс. Это не будет считаться ui компонентом

Верно, но такое себе плодить двадцать синглтонов не?

Такое себе конечно, но если знаешь меру, то нет. Да и можно сделать не синглтон, если общий стейт не нужен, главное чтобы этот класс инкапсулировал работу с памятью и файлами

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

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

читать файл максимально быстро? странный вопрос))
zamtmn
53
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Кто-нибудь решал проблему с автоматическим скроллингом к выбранной ячейке в TDBGrid в Lazarus? Проблема в том, что есть допустим 3 столбца, третий столбец виден наполовину, вк...
Дмитрий Логинов
1
Приветствуем всех! Устали без проектов? Если вы программист и хотите получать стабильные заказы, компания Elif предлагает вам недельный курс по поиску проектов и их ведению. ...
Elif
1
А чего сейчас в моде вместо Error для эксепшенов? А то я тут внезапно узрел что он не рекомендуется :) У Try::Tiny какой-то совершенно ужасный синтаксис если надо конкретные э...
Denis F
19
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Чорт! Чорт! Чорт! Стала ставить через GetIt (написано же, что ручками не рекомендуется) Сломалось на дублировании моей TSkLabel. Чтож мне ее по всем проектам переименовывать в...
Катерина Свиридова
7
Привет. Сразу скажу, что на C/C++/Rust я не пишу, но тем не менее возникла потребность дебага C/C++/Rust кода. Суть: есть серверное приложение, которое периодически ведёт себ...
ninekeem 🐳
4
Hey someone plz help to resolve my issue here is my table... Log { id user_id type target_ct target_obj_id action_ct action_obj_id workspace_id created_at } i wanna fil...
Rahul Singh
1
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
9
Карта сайта