Проблема довольно проста. Вопрос в том, что касается использования ViewModels, LiveData и других связанных с Lifecycle арочных подходов.
У меня есть активность с NavDrawer, который переключает фрагменты внутри.
А также у меня есть случай, когда на экране одновременно присутствуют два фрагмента - это будет основной болью. Один фрагмент имеет ViewPager с вложенными Fragments
(не спрашивайте почему). Другой фрагмент просто получает информацию от первого, когда пользователь выполняет некоторые действия. Это достигается просто путем совместного использования активности viewmodel. Но само приложение имеет много бизнес-логики, и по мере продвижения модель представления становится все больше и больше.
То, что я хочу спросить - не квитанция или правила, как это исправить, или, может быть, как преодолеть это, исправив всю структуру проекта. Я хочу попросить совета, как я могу применить подход MVVM в стиле android.arch.lifecycle для моего варианта использования.
Я не видел ничего более сложного, чем просто разделение Activity ViewModel между фрагментами. Но часто это не лекарство.
То, что вы можете увидеть здесь - на самом деле беспорядок. Дело в том, что все делят ActivityViewModel
. Соединения (агрегация) из FirstFragment означают, что ViewPager
внутри FirstFragment
инициирует ChildFragments
и они также работают с тем же ActivityViewModel
(убей меня). В результате все работают с одной общей моделью ViewModel.
Мое предложение состоит в том, чтобы добавить ViewModel для каждого слоя. Так что Activity/Fragments/ChildFragments имеют свои собственные ViewModels. Но что здесь появляется - как нам тогда общаться?
Возможные решения:
- Наличие двух ViewModels для одного компонента. Один ViewModel будет обрабатывать/делегировать бизнес-логику, а другой - устанавливать связь. Две модели на компонент - не очень хорошо, да?
- Имея старый интерфейс (пожалуйста, нет!)
-
Другие обходные пути - как слушатели изменений DB/SharedPrefs/Realm и шины событий (я слишком стар для этого :().
-
Ваше решение здесь!
Я скажу, что все вышеперечисленное нарушает многие принципы дизайна, так что мне делать? Как я должен выйти из этого беспорядка? Есть ли здесь Uncle Bob
или другой superhero
чтобы помочь?
PS - Ну, создание UML или других диаграмм - не моя сильная сторона. Простите за это.
PPS - мне известны образцы Google.