Size: a a a

Android Architecture

2020 May 09

AY

Andy Yanechko in Android Architecture
Некрутов Эдуард
Мы, задавшись вопросом разбиения на модули по фичам, решили написать свою библиотеку. У нас роутеры переключают в навигаторе не фрагменты, а некий модуль, который включает в себя фрагмент. Ссылку на либу кидал выше, могу тебе продублировать, если интересно.
Спасибо, я найду ссылку
источник
2020 May 10

YW

Yakov Weber in Android Architecture
Антон
Всем хеллоу. Работаю сейчас с проектом MVP, параллельно в универе и вся фигня, так что чет не особо трогал MVVM.
Находил немало реп MVVM, но сколько реп, столько и архитектур MVVM))
Скиньте, пожалуйста ссылочки на гитхаб проекты, с которых можно и, собственно, нужно брать правильный пример, чтобы быть модным хипстером, а не костыльным чуваком с горе MVVMкой
https://github.com/askont/flaskDionysus  туспик + мввм + чистая арх, главное внимательно посмотри как работать со скоупами и фабриками для инжекта зависимости во вьюмодел
источник

P

Paul in Android Architecture
Andy Yanechko
Кто пишет архитектуру с разделениям по фичам, как вы перемещаетесь между фичами и между Активити в app и фичами. Вообще что используете для навигации? NavigationComponent 2.3.0-alpha01, если да то можете скинуть премер такой навигации?
Мы на проекте делали таким образом:
1. Каждый экран, к которому привязана вьюмодель\презентер, имеет интерфейс для навигации (фактически коллбеки)
2. Этот коллбек инжектися во вьюМодель\Презентер и вызывает эти методы везде, где необходима навигация
3. Реализация этих коллбеков в модуле, который знает обо всех фичах.  (У нас это модуль app  обычно он знает о всех фичах в приложении). Там можно реализовать навигацию.
4. На проекте используется Koin, поэтому можно привязать жц коллбека к жц экрана. Но хранить в глобальном скоупе, наверное, тоже можно
Таким образом с помощью DIP можно реализовать навигацию между фичами, которые не знают ничего друг об друге
источник

НЭ

Некрутов Эдуард... in Android Architecture
Paul
Мы на проекте делали таким образом:
1. Каждый экран, к которому привязана вьюмодель\презентер, имеет интерфейс для навигации (фактически коллбеки)
2. Этот коллбек инжектися во вьюМодель\Презентер и вызывает эти методы везде, где необходима навигация
3. Реализация этих коллбеков в модуле, который знает обо всех фичах.  (У нас это модуль app  обычно он знает о всех фичах в приложении). Там можно реализовать навигацию.
4. На проекте используется Koin, поэтому можно привязать жц коллбека к жц экрана. Но хранить в глобальном скоупе, наверное, тоже можно
Таким образом с помощью DIP можно реализовать навигацию между фичами, которые не знают ничего друг об друге
Колбеки, это потому что они чтото возвращают? Созданный фрагмент на который вы переходите уже в модуле? Или как это выглядит? Кто работает с фрагментМенеджером?
источник

P

Paul in Android Architecture
Некрутов Эдуард
Колбеки, это потому что они чтото возвращают? Созданный фрагмент на который вы переходите уже в модуле? Или как это выглядит? Кто работает с фрагментМенеджером?
Нет, они ничего не возвращают. Наверное есть более подходящее название, но я, кроме как коллбека ничего придумать не могу.  

Интерфейс выглядит таким образом:
interface SomeFeatureNavigationCallback{
  fun openAnotherFeature()
}

В проекте используется чичероне, Поэтому он создает фрагмент и работает с фрагемент менеджером. Реализация SomeFeatureNavigationCallback же использует сам чичероне
источник

НЭ

Некрутов Эдуард... in Android Architecture
Paul
Нет, они ничего не возвращают. Наверное есть более подходящее название, но я, кроме как коллбека ничего придумать не могу.  

Интерфейс выглядит таким образом:
interface SomeFeatureNavigationCallback{
  fun openAnotherFeature()
}

В проекте используется чичероне, Поэтому он создает фрагмент и работает с фрагемент менеджером. Реализация SomeFeatureNavigationCallback же использует сам чичероне
Router))
источник

НЭ

Некрутов Эдуард... in Android Architecture
А как вы передаете его в зависимости di? Фрагмент и модуль di выделены в отдельный независимый от app модуль?
источник

P

Paul in Android Architecture
Фича знает об этом коллбеке, потому что интерфейс лежит в модуле фичи. Реализация этого коллбека лежит в модуле app.

Вьюмодель (в проекте используется вьюмодель) запрашивает в конструктор этот интерфейс.

Поскольку модуль app знает обо всех фрагментах, то коином в модуле APP можно привязать жизненный цикл коллбека к жизненном циклу фрагмента,  к которому он привязан. Коином внутри модуля app создается объект в скоупе фрагмента. А внутри фичи уже можно запрашивать зависимость для вью модели.

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

НЭ

Некрутов Эдуард... in Android Architecture
Paul
Фича знает об этом коллбеке, потому что интерфейс лежит в модуле фичи. Реализация этого коллбека лежит в модуле app.

Вьюмодель (в проекте используется вьюмодель) запрашивает в конструктор этот интерфейс.

Поскольку модуль app знает обо всех фрагментах, то коином в модуле APP можно привязать жизненный цикл коллбека к жизненном циклу фрагмента,  к которому он привязан. Коином внутри модуля app создается объект в скоупе фрагмента. А внутри фичи уже можно запрашивать зависимость для вью модели.

В случае даггера, инстансы коллбеков можно сделать глобальными, и внутри модуля фичи уже запрашивать этот инстанс и инжектить во вью-модель фабрику, а потом уже во вьюмодель.
Я понял. Вы модуль koin, который относится к скоупу фичи оставили в app. Соответственно для каждой фичи в app модуле лежит как минимум этот роутер-колбек и модуль di. Если я все правильно понял то пересоздание экрана у вас работает нормально.
А вот что с восстановлением состояния после уничтожение процесса?

И на сколько сложно будет сделать фрагмент контейнер, например с таббарами или пейджером, со своим внутренним навигатором?
источник

D

Dmitry in Android Architecture
Всем привет. Может не сюда вопрос, конечно. Но в остальных группах тишина. Такой вопрос.
У меня есть YoutubeView (наследник View). И под ним список LisView, в котором список видеороликов. Как мне заставить View каждый раз отображать новое видео по нажатию на элемент LIstView? Подскажите пожалуйста. Я использую YouTube API.
источник

D

Dmitry in Android Architecture
Может кто подскажет хотя бы куда копать?
источник

НЭ

Некрутов Эдуард... in Android Architecture
Dmitry
Всем привет. Может не сюда вопрос, конечно. Но в остальных группах тишина. Такой вопрос.
У меня есть YoutubeView (наследник View). И под ним список LisView, в котором список видеороликов. Как мне заставить View каждый раз отображать новое видео по нажатию на элемент LIstView? Подскажите пожалуйста. Я использую YouTube API.
Не знаю про YouTube API, но я бы предположил, что там есть метод типа showVideo(videoId). Тогда ты можешь по клику вызывать этот метод с нужным id. Можно из презентер/вьюмодели отдавать данные для списка сразу со слушателем для клика.
источник

А

Антон in Android Architecture
Yakov Weber
https://github.com/askont/flaskDionysus  туспик + мввм + чистая арх, главное внимательно посмотри как работать со скоупами и фабриками для инжекта зависимости во вьюмодел
спасибо
источник

AM

Artem Mi in Android Architecture
https://imgur.com/a/idCCSd2 Вечер добрый, пытаюсь реализовать клин архитектуру, вроде все получается, но есть сомнения по поводу true, false, как будет правильнее обработать это событие? Не в домейне?
источник

YW

Yakov Weber in Android Architecture
Artem Mi
https://imgur.com/a/idCCSd2 Вечер добрый, пытаюсь реализовать клин архитектуру, вроде все получается, но есть сомнения по поводу true, false, как будет правильнее обработать это событие? Не в домейне?
Как по мне через if работать с Boolean проще, when хорош когда у тебя будет какое нибуть перечеслени или сиалет класс, в общем то не критично как по мне но с флов этот кейс смотрелся бы получше(не было бы колбэков)
источник

AM

Artem Mi in Android Architecture
Понял, спасибо
источник

YW

Yakov Weber in Android Architecture
Artem Mi
Понял, спасибо
Ещё с наймингом тебе бы разобраться, просто LoginUser как по мне для репозиториямине очень информативно, если же это useCase то почему он напрямую с клиентом работает(наследования видел по факту это все же репозиторий)
источник

AM

Artem Mi in Android Architecture
Там UseCase<T, R> опциональный, если бы это был обычный интерфейс, я мог бы через интерфейс все оформить
источник

AM

Artem Mi in Android Architecture
А так интерфейс UseCase<T, R>
источник

KD

Konstantin Dovnar in Android Architecture
Yakov Weber
Ещё с наймингом тебе бы разобраться, просто LoginUser как по мне для репозиториямине очень информативно, если же это useCase то почему он напрямую с клиентом работает(наследования видел по факту это все же репозиторий)
В каком месте ты увидел, что это по факту репозиторий?

Никто и ничто не мешает писать банальный андроидовый клин без репозитория, обращаясь напрямую к датасорсам из юзкейсов.
источник