Назовите минусы MVP (1/2)
Проблемы классической реализации MVP в Android-приложении:
• Циклическая зависимость между View и Presenter
В MVP View хранит ссылку на Presenter, а Presenter ссылается на View. Это не так страшно, т.к. Presenter не знает о конкретном классе, реализующем интерфейс View, но факт остается фактом.
Из-за того, что Presenter ссылается на View, время его жизни должно не превышать время жизни View. Presenter обязан остановить все асинхронные операции, до перехода Activity или Fragment в состояние destroyed.
Это приводит нас ко второй проблеме.
• Presenter предоставляет методы для обработки жизненного цикла View
В хорошей реализации MVP Presenter не имеет методов жизненного цикла, таких как onStart()/onStop(). Вместо этого создаются методы типа init() для загрузки и отображения данных и unsubscribe() для отписки от асинхронных вызовов.
При такой реализации Presenter не знает о жизненном цикле, но View должна сама заботиться о вызове этих методов. Если View не вызовет unsubscribe() до отработки метода onDestroy(), то это может привести к утечке Activity.
#Architecture
Проблемы классической реализации MVP в Android-приложении:
• Циклическая зависимость между View и Presenter
В MVP View хранит ссылку на Presenter, а Presenter ссылается на View. Это не так страшно, т.к. Presenter не знает о конкретном классе, реализующем интерфейс View, но факт остается фактом.
Из-за того, что Presenter ссылается на View, время его жизни должно не превышать время жизни View. Presenter обязан остановить все асинхронные операции, до перехода Activity или Fragment в состояние destroyed.
Это приводит нас ко второй проблеме.
• Presenter предоставляет методы для обработки жизненного цикла View
В хорошей реализации MVP Presenter не имеет методов жизненного цикла, таких как onStart()/onStop(). Вместо этого создаются методы типа init() для загрузки и отображения данных и unsubscribe() для отписки от асинхронных вызовов.
При такой реализации Presenter не знает о жизненном цикле, но View должна сама заботиться о вызове этих методов. Если View не вызовет unsubscribe() до отработки метода onDestroy(), то это может привести к утечке Activity.
#Architecture