Size: a a a

Android Architecture

2020 August 11

PA

Pavel Aleksandrov in Android Architecture
Konstantin dmz9
скорей всего на экране будет что то типа счетчика корзины, а значит есть какая то реактивная часть (или колбек) который за это отвечает
Сейчас сделано примерно так, но сам инстанс корзины живет в ViewModel. которая дергается в необходимых экранах. Я хочу переделать это через БД
источник

PA

Pavel Aleksandrov in Android Architecture
И соответственно есть listener'ы для подписывания на состояние корзины. Но во многих местах возникают проблемы с консистентностью
источник

Kd

Konstantin dmz9 in Android Architecture
да я бы вообще не морочился и кидал интенты со счетчиком в корзине, в сингл активити ловишь и показываешь
источник

PA

Pavel Aleksandrov in Android Architecture
Konstantin dmz9
можешь штопать интеракторы на каждый экран если так привык. но в каком то месте у тебя всеравно будет синглтон отвечающий за работу с корзиной.
не в интеракторе так в другом месте
А где этот синглтон должен жить и кто должен управлять его ЖЦ?
источник

Kd

Konstantin dmz9 in Android Architecture
в скопе приложения он у тебя живет
источник

Kd

Konstantin dmz9 in Android Architecture
корзина всегда доступна когда приложение активно
источник

PA

Pavel Aleksandrov in Android Architecture
Konstantin dmz9
в скопе приложения он у тебя живет
Ок, допустим корзина будет всегда существовать с привязкой к Application scope. Как сделать удобное реактивное её обновление из всех необходимых экранов/частей приложения?
источник

Kd

Konstantin dmz9 in Android Architecture
броадкаст ресиверы на экране? )
источник

Kd

Konstantin dmz9 in Android Architecture
ну понятно что не архитектурненько но зато близко к андроиду
источник

Kd

Konstantin dmz9 in Android Architecture
реактивные фреймворки, колбеки, общая шина, интенты - выбери что нибудь по душе
источник

PA

Pavel Aleksandrov in Android Architecture
Konstantin dmz9
ну понятно что не архитектурненько но зато близко к андроиду
есть необходимость писать чисто, чтобы в будущем заюзать мультиплатформенно всю бизнес-логику. Поэтому Coroutines Flow предпочтительней
источник

DM

Dmitriy Mersiyanov in Android Architecture
Pavel Aleksandrov
есть необходимость писать чисто, чтобы в будущем заюзать мультиплатформенно всю бизнес-логику. Поэтому Coroutines Flow предпочтительней
Channel или StateFlow, далее подписаться на обновления где нужно
источник

PA

Pavel Aleksandrov in Android Architecture
Dmitriy Mersiyanov
Channel или StateFlow, далее подписаться на обновления где нужно
Спасибо, тоже думаю что это оптимально
источник

DM

Dmitriy Mersiyanov in Android Architecture
Pavel Aleksandrov
Спасибо, тоже думаю что это оптимально
его инжектишь синглтоном и проблем с констистентностью быть не должно)
источник

PA

Pavel Aleksandrov in Android Architecture
Dmitriy Mersiyanov
его инжектишь синглтоном и проблем с констистентностью быть не должно)
Окей, допустим будет у меня 1 синглтон со скоупом приложения. Как мне оптимальней всего кэшировать этот синглтон в ДБ при любом изменении?
источник

DM

Dmitriy Mersiyanov in Android Architecture
Pavel Aleksandrov
Окей, допустим будет у меня 1 синглтон со скоупом приложения. Как мне оптимальней всего кэшировать этот синглтон в ДБ при любом изменении?
что значит "кэшировать этот синглтон в ДБ" ?
источник

PA

Pavel Aleksandrov in Android Architecture
Dmitriy Mersiyanov
что значит "кэшировать этот синглтон в ДБ" ?
ну кэшировать данные из этого синглтона в БД и соответственно брать данные из неё при старте приложения?
источник

DM

Dmitriy Mersiyanov in Android Architecture
мне кажется на базу можно повесить реактивный листенер, который будет менять значения этого channel'a если данные изменились.

Как лучше получить данные при старте это другой вопрос - возможно явно их запросить из БД на старте
источник

OP

Oleg Pchelkin in Android Architecture
Pavel Aleksandrov
ну кэшировать данные из этого синглтона в БД и соответственно брать данные из неё при старте приложения?
Ну этим репозиторий должен управлять. Через интерактор кидаешь изменение - сохраняешь в бд и синкаешь с сервером, если надо. При старте из бд достаешь инфу и дальше работаешь уже с моделью из памяти. В БД должно при каждом изменении писаться, иначе при закрытии приложения может что то и потеряться
источник

PA

Pavel Aleksandrov in Android Architecture
Oleg Pchelkin
Ну этим репозиторий должен управлять. Через интерактор кидаешь изменение - сохраняешь в бд и синкаешь с сервером, если надо. При старте из бд достаешь инфу и дальше работаешь уже с моделью из памяти. В БД должно при каждом изменении писаться, иначе при закрытии приложения может что то и потеряться
Тогда тут получается, что можно явно работать с моделью из синглтона или работать через интеракторы с репозиториями. Или наружу из модели открыть только StateFlow из нужных сущностей, а всю остальную логику воплощать через отдельные интеракторы?
источник