Ответ
Плюсы:
✅ Четкое разделение ответственности (View, Presenter, Model)
✅ Легче тестировать бизнес-логику (Presenter не зависит от Android API)
✅ Проще поддерживать и масштабировать
✅ View становится "глупым", что уменьшает связность
Минусы:
❌ Больше boilerplate-кода (интерфейсы для View-Presenter)
❌ Presenter может стать "God object" при неправильном проектировании
❌ Нет стандартной реализации (разные вариации MVP)
❌ Сложность с сохранением состояния Presenter при повороте экрана
Пример:
// Contract
interface LoginContract {
interface View {
fun showError(message: String)
fun onLoginSuccess()
}
interface Presenter {
fun login(username: String, password: String)
}
}
// Presenter
class LoginPresenter(private val view: LoginContract.View) : LoginContract.Presenter {
override fun login(username: String, password: String) {
if (username.isEmpty() || password.isEmpty()) {
view.showError("Fields empty!")
} else {
// Auth logic...
view.onLoginSuccess()
}
}
}