Size: a a a

Android Architecture

2017 January 30

S

Shushper in Android Architecture
Sergey D
презентеры живут вечно?
У меня используется в роли бд реалм, который желательно закрыть когда он больше не нужен или когда закрыли приложение.
Как вы отлавливаете онДестрой приложения что бы позакрывать все конекшены и в какой сущности?
У реалма инстансы нужно открывать и закрывать, привязываясь к жизненному циклу активти. В onCreate открыл, в onDestroy закрыл. Соотвественно также нужно поступать когда он в презентере. Даже если презентер преживает жизненный цикл активити, можно вызывать методы bindView и unBindView и в них закрывать.
источник

М

Михаил in Android Architecture
Shushper
У реалма инстансы нужно открывать и закрывать, привязываясь к жизненному циклу активти. В onCreate открыл, в onDestroy закрыл. Соотвественно также нужно поступать когда он в презентере. Даже если презентер преживает жизненный цикл активити, можно вызывать методы bindView и unBindView и в них закрывать.
то есть при пересоздании активити в бд лезть повторно?
источник

EM

Eugene Matsyuk in Android Architecture
@FireDemon по-моему ваш вопрос пропал(
источник

DB

Dmitry Berdnikov in Android Architecture
Eugene Matsyuk
Кстати с чатика Мокси прозвучал хороший вопрос, а где должна быть геолокация? Собственно а где должны быть также и ContactProvide, CallendarProvider и прочие андроидовские средства.
Я думаю, что работы с ними должна проводиться в Data слое на уровне работы с той же сетью или БД, то есть под Репозиторием.
Этим мы добиваемся того, что в бизнес-логике не будет андроидовских классов. Ну и плюс получается вполне корректное разделение по слоям.
Кто что думает?
То есть в классе репозитория будут объекты для работы с бд/сеть/геолокация/контакты? ввиде полей класса?
источник

А

Андрей in Android Architecture
Sergey D
презентеры живут вечно?
У меня используется в роли бд реалм, который желательно закрыть когда он больше не нужен или когда закрыли приложение.
Как вы отлавливаете онДестрой приложения что бы позакрывать все конекшены и в какой сущности?
в нормальных приложениях презентеры живут не вечно, а пока нужна вьюшка. Тоесть когда вьюшка умирает/пересоздается из-за тех же поворотов экрана, то презентер это переживает. Но когда вьюшка убивается окончательно, то и презентер умирает тоже.
источник

DB

Dmitry Berdnikov in Android Architecture
Андрей
в нормальных приложениях презентеры живут не вечно, а пока нужна вьюшка. Тоесть когда вьюшка умирает/пересоздается из-за тех же поворотов экрана, то презентер это переживает. Но когда вьюшка убивается окончательно, то и презентер умирает тоже.
Тут есть и другой подход что презентер и при поворотах умирает, но data слой живет в синглтоне.
к примеру как в этйо статье
https://medium.com/@theMikhail/presenters-are-not-for-persisting-f537a2cc7962#.bylawfdv4
источник

М

Михаил in Android Architecture
Андрей
в нормальных приложениях презентеры живут не вечно, а пока нужна вьюшка. Тоесть когда вьюшка умирает/пересоздается из-за тех же поворотов экрана, то презентер это переживает. Но когда вьюшка убивается окончательно, то и презентер умирает тоже.
поэтому тру это configChanges='все что только можно'
источник

EM

Eugene Matsyuk in Android Architecture
Dmitry Berdnikov
То есть в классе репозитория будут объекты для работы с бд/сеть/геолокация/контакты? ввиде полей класса?
Да, в Репозитории будут объекты для с сетью, бд.
Но, создаваться эти объекты должны не в Репозитории! Помним про Dependency Injection
И если мы догадываемся, что с той же БД мы можем сегодня работать через SQLite, а завтра через StorIO, то можно добавить специальный DBFacade между репозиторием и классами для работы с БД. Такой вопрос кстати был, я обещал нарисовать картинку. Помню, нарисую =)
источник

SD

Sergey D in Android Architecture
пересоздается из-за тех же поворотов экрана, то презентер это переживает. Но когда вьюшка убивается окончательно, то и презентер умирает тоже.

так а как отличить что фрагмент убился и будет пересоздан от того что он убился окончательно?
источник

А

Андрей in Android Architecture
Dmitry Berdnikov
Тут есть и другой подход что презентер и при поворотах умирает, но data слой живет в синглтоне.
к примеру как в этйо статье
https://medium.com/@theMikhail/presenters-are-not-for-persisting-f537a2cc7962#.bylawfdv4
Подход когда сохраняем модель а не презентер - тоже хороший подход. Но все-равно должен быть какой-то механизм, который будет контролировать нужны ли еще эти данные, или нет. Иначе можно накапливать ненужный мусор.
источник

А

Андрей in Android Architecture
Sergey D
пересоздается из-за тех же поворотов экрана, то презентер это переживает. Но когда вьюшка убивается окончательно, то и презентер умирает тоже.

так а как отличить что фрагмент убился и будет пересоздан от того что он убился окончательно?
как минимум методы isFinishing()/isRemoving() можно дернуть. Те же Mosby/Moxy это решают. Можно у них в искодниках посмотреть.
источник

D

Dmitriy in Android Architecture
Андрей
как минимум методы isFinishing()/isRemoving() можно дернуть. Те же Mosby/Moxy это решают. Можно у них в искодниках посмотреть.
как раз вроде так и решают - смотрел
источник

AP

Alexander Popsuenko in Android Architecture
@eugene_matsyuk Привет. Такой вопросик еще.
Ты говорил, что репозитории не должны знать друг о друге, а если объекты взаимосвязанны, то как при каком-либо действии над одним сохранить данные еще о другом? инжектить DAO или API в репозиторий?
источник

EM

Eugene Matsyuk in Android Architecture
Alexander Popsuenko
@eugene_matsyuk Привет. Такой вопросик еще.
Ты говорил, что репозитории не должны знать друг о друге, а если объекты взаимосвязанны, то как при каком-либо действии над одним сохранить данные еще о другом? инжектить DAO или API в репозиторий?
Ну так пускай Интерактор все это делает =)
источник

EM

Eugene Matsyuk in Android Architecture
Репозитории по большей части пассивны
источник

EM

Eugene Matsyuk in Android Architecture
это же дата уровень
источник

AP

Alexander Popsuenko in Android Architecture
Ну вот пример.
Я создал комнату и на сервере создались некоторые события для неё.
В репозитории я создаю её через апи и сохраняю результат. Но мне нужно еще подгрузить события для комнаты и сохранить их.
Получается выносить работу с событиями в интерактор? Что-то меня здесь настораживает)
источник

А

Андрей in Android Architecture
Забота репозитория - отправить запрос для создания комнаты. А то, что для этой комнаты потом должны быть получены какие-то события - это уже бизнес логика. Так почему же не интеракторы этим заниматься должны?
источник

EM

Eugene Matsyuk in Android Architecture
Андрей
Забота репозитория - отправить запрос для создания комнаты. А то, что для этой комнаты потом должны быть получены какие-то события - это уже бизнес логика. Так почему же не интеракторы этим заниматься должны?
все верно
источник

AP

Alexander Popsuenko in Android Architecture
По сути, так и должно быть.
Просто у меня в голове уже сложилось, что репозиторий должен выдать скомпонованный объект.
Видимо, нужно немного поменять свой ход мыслей)
Спасибо.
источник