Size: a a a

Moxy – MVP библиотека под Android

2018 September 05

IG

Ilya Gulya in Moxy – MVP библиотека под Android
А как у тебя feature-impl попадает в app?
источник

IG

Ilya Gulya in Moxy – MVP библиотека под Android
Если нет связи как таковой
источник

IG

Ilya Gulya in Moxy – MVP библиотека под Android
я что-то туплю
источник

EM

Eugene Matsyuk in Moxy – MVP библиотека под Android
вообщем парадигма такая

у каждой фичи есть некое апи, которое отдается наружу
через это апи мы можем запускать фичу или использовать что-то из фичи
создается интерфейс FeatureApi
в этот интерфейс помещаются интерфейсы типа PurchaseInteractor и т.д.
собственно это и есть api-module
как он реализован, мне все равно))

далее идет impl-module
он зависит от api и должен предоставить имплементации всех интерфейсов
а вот FeatureApi имплементируется обычно даггеровским компонентов, который все сводит воедино

в аппе я уже апи и имплементацию свожу
то есть наружу даю FeatureApi, чью реализация - это сгенерированный даггеровский компонент от impl-module
источник

EM

Eugene Matsyuk in Moxy – MVP библиотека под Android
если супер-кратко, то так
источник

EM

Eugene Matsyuk in Moxy – MVP библиотека под Android
Ilya Gulya
Это понятно как делать?
честно, так как я с кишками мокси на вы, был бы премного благодарен за помощь))
источник

АЕ

Алексей Ершов in Moxy – MVP библиотека под Android
Eugene Matsyuk
вообщем парадигма такая

у каждой фичи есть некое апи, которое отдается наружу
через это апи мы можем запускать фичу или использовать что-то из фичи
создается интерфейс FeatureApi
в этот интерфейс помещаются интерфейсы типа PurchaseInteractor и т.д.
собственно это и есть api-module
как он реализован, мне все равно))

далее идет impl-module
он зависит от api и должен предоставить имплементации всех интерфейсов
а вот FeatureApi имплементируется обычно даггеровским компонентов, который все сводит воедино

в аппе я уже апи и имплементацию свожу
то есть наружу даю FeatureApi, чью реализация - это сгенерированный даггеровский компонент от impl-module
Если app занимается "сведением" модулей воедино, то зачем от него прятать реализацию фичи? Или если связыванием заниается отдельный adapter, значит, он тоже знает про реализацию, и может проксировать вызовы рефлектора.
источник

EM

Eugene Matsyuk in Moxy – MVP библиотека под Android
Eugene Matsyuk
вообщем парадигма такая

у каждой фичи есть некое апи, которое отдается наружу
через это апи мы можем запускать фичу или использовать что-то из фичи
создается интерфейс FeatureApi
в этот интерфейс помещаются интерфейсы типа PurchaseInteractor и т.д.
собственно это и есть api-module
как он реализован, мне все равно))

далее идет impl-module
он зависит от api и должен предоставить имплементации всех интерфейсов
а вот FeatureApi имплементируется обычно даггеровским компонентов, который все сводит воедино

в аппе я уже апи и имплементацию свожу
то есть наружу даю FeatureApi, чью реализация - это сгенерированный даггеровский компонент от impl-module
ну и в продолжении
балгодаря этим независимым апи, я могу в имплементации прописывать апи, от кого я завишу
и имплементации этих зависимостей, их доставка меня не волнует
источник

EM

Eugene Matsyuk in Moxy – MVP библиотека под Android
Алексей Ершов
Если app занимается "сведением" модулей воедино, то зачем от него прятать реализацию фичи? Или если связыванием заниается отдельный adapter, значит, он тоже знает про реализацию, и может проксировать вызовы рефлектора.
дело в том, что в аппе еще много легаси, и я не хочу, чтобы легаси знали об имплементациях
поэтому есть адаптер, который это все сводит, а апп знает только про апи

так то в чистом приложении, конечно, аппа достаточно с головой
источник

IG

Ilya Gulya in Moxy – MVP библиотека под Android
Eugene Matsyuk
честно, так как я с кишками мокси на вы, был бы премного благодарен за помощь))
Короче, так:
1) Создаёшь ещё один модуль, в котором создаёшь пустой MoxyReflector с таким же пакетом, какой ты в impl указал в аргументе для annotationProcessor-а.
2) Этот модуль подключаешь к app вот так:
compileOnly project(":feature-stub")
3) Добавляешь этот пакет который ты в impl указал в аннотацию @RegisterMoxyReflectorPackages. Эта аннотация должна быть навешена на Application в app модуле.
источник

IG

Ilya Gulya in Moxy – MVP библиотека под Android
Eugene Matsyuk
вообщем парадигма такая

у каждой фичи есть некое апи, которое отдается наружу
через это апи мы можем запускать фичу или использовать что-то из фичи
создается интерфейс FeatureApi
в этот интерфейс помещаются интерфейсы типа PurchaseInteractor и т.д.
собственно это и есть api-module
как он реализован, мне все равно))

далее идет impl-module
он зависит от api и должен предоставить имплементации всех интерфейсов
а вот FeatureApi имплементируется обычно даггеровским компонентов, который все сводит воедино

в аппе я уже апи и имплементацию свожу
то есть наружу даю FeatureApi, чью реализация - это сгенерированный даггеровский компонент от impl-module
то есть у тебя если ещё один модуль, который зависит от feature-api и от feature-impl который создаёт Dagger-компонент?
источник

EM

Eugene Matsyuk in Moxy – MVP библиотека под Android
Ilya Gulya
Короче, так:
1) Создаёшь ещё один модуль, в котором создаёшь пустой MoxyReflector с таким же пакетом, какой ты в impl указал в аргументе для annotationProcessor-а.
2) Этот модуль подключаешь к app вот так:
compileOnly project(":feature-stub")
3) Добавляешь этот пакет который ты в impl указал в аннотацию @RegisterMoxyReflectorPackages. Эта аннотация должна быть навешена на Application в app модуле.
именно compileOnly?
а почему не implementation or api?
источник

EM

Eugene Matsyuk in Moxy – MVP библиотека под Android
Ilya Gulya
то есть у тебя если ещё один модуль, который зависит от feature-api и от feature-impl который создаёт Dagger-компонент?
да
обычно это как раз апп
ну или в моем случае адаптер

он все сводит воедино
источник

EM

Eugene Matsyuk in Moxy – MVP библиотека под Android
кстати этой точкой может быть и какой-нить апп-пример, который запускает конкретно твою фичу
источник

AK

Aleksei Korshun in Moxy – MVP библиотека под Android
Eugene а есть какой либо пример на github ?
источник

IG

Ilya Gulya in Moxy – MVP библиотека под Android
Eugene Matsyuk
именно compileOnly?
а почему не implementation or api?
потому что в рантайме эти классы уже будут существовать, их просто не видит модуль на этапе компиляции. Поэтому мы говорим - вот в этом модуле лежат классы которые будут существовать. Ты их используй при компиляции, но в apk не клади
источник

YS

Yuri Shmakov in Moxy – MVP библиотека под Android
compileOnly будет виден в момент компиляции, но в саму сборку не попадёт
источник

IG

Ilya Gulya in Moxy – MVP библиотека под Android
Eugene Matsyuk
да
обычно это как раз апп
ну или в моем случае адаптер

он все сводит воедино
интересный подход, спасибо. Попробую на выходных такое.
источник

IG

Ilya Gulya in Moxy – MVP библиотека под Android
Eugene Matsyuk
именно compileOnly?
а почему не implementation or api?
их же так или иначе сгенерирует moxy-compiler
источник

AK

Aleksei Korshun in Moxy – MVP библиотека под Android
Ilya Gulya
интересный подход, спасибо. Попробую на выходных такое.
я не до конца понимаю, какие проблемы решает или какие преимущества дает такой подход, можете поделиться?
источник