Я давно использую MVP и начинаю переходить в гибридное состояние между MVP и MVVM
Подробно мои приложения будут выглядеть так:
- Каждое действие имеет от 0 до x фрагментов, которые представляют его взгляды
- Каждый фрагмент запрашивает ViewModel действия, чтобы они могли получить данные, используя LiveData
- Деятельность будет иметь отдельную ViewModel, которая будет выступать в качестве докладчика. При создании этого ViewModel будет добавлен ViewModel действия с LiveData, чтобы он мог обновлять пользовательский интерфейс при необходимости
- Докладчик получит сообщения, отправленные на ViewModel данных, и отправит результаты обратно на него
Мои вопросы:
- Может ли удерживание ссылки на данные ViewModel в презентаторе ViewModel вызвать утечку памяти или неблагоприятные последствия, такие как утечки памяти?
- Где должна быть бизнес-логика? в презентере или в модельной части?
Например, допустим, у меня есть список элементов, и пользователь долго нажимает один, чтобы отредактировать их, какая часть этой архитектуры должна отвечать за проверку, есть ли у пользователя разрешение на это, и позволяет ли он редактировать элемент или показать сообщение об ошибке?
- Есть ли у Фрагментов способ получить только часть ViewModel Действия?
Например, если предположить, что у действия есть 3 фрагмента и одна модель представления для обслуживания
Могу ли я использовать что-то вроде:
class MainViewModel : ViewModel() , IFragmentA, IFragmentB, IFragmentC
и затем, когда я пытаюсь получить ViewModel во фрагментах, я могу написать что-то вроде:
lateinit var viewModel: IFragmentA
override fun onAttach(context: Context?) {
super.onAttach(context)
vm = ViewModelProviders.of(context as AppCompatActivity).get(IFragmentA::class.java)
}
примечание: я знаю, что вышеприведенный код не работает, я спрашиваю, есть ли способ, чтобы что-то подобное могло работать
- Является ли правильный способ отправки сообщений обратно в активность SingleEvents?
Например, если пользователь пытается удалить запись, и я хочу, чтобы он ввел пароль, поток будет:
- Фрагмент отправляет сообщение для удаления на свою ViewModel
- ViewModel передает его докладчику
- Ведущий решает, что ему нужно подтвердить пароль перед тем, как продолжить
- Докладчик устанавливает значение SingleEvent в ViewModel
- ViewModel уведомляет подписчиков события (в данном случае MainActivity), что они должны показать диалоговое окно с запросом пароля
Спасибо за любую помощь, которую вы можете оказать