Ответ
Хранение View в Presenter приводит к утечкам памяти, так как Presenter может пережить View (например, при повороте экрана). Это нарушает принцип однонаправленности данных и усложняет тестирование.
Пример проблемы:
class MyPresenter {
var view: MyView? = null // потенциальная утечка
fun attachView(view: MyView) {
this.view = view
}
}
Решение: использовать weak references или лучше - интерфейсы с явными методами attach/detach:
class MyPresenter {
private var viewRef: WeakReference<MyView>? = null
fun attachView(view: MyView) {
viewRef = WeakReference(view)
}
fun detachView() {
viewRef?.clear()
viewRef = null
}
}
Лучшая практика - reactive подход (RxJava/Flow), где View подписывается на Presenter.