Как сообщить View что что-то произошло в MVP

«Как сообщить View что что-то произошло в MVP» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В MVP для уведомления View о событиях из Presenter следует использовать интерфейс обратного вызова (View interface). Presenter держит слабую ссылку на View и вызывает его методы при необходимости.

// View interface
interface MainView {
    fun showData(data: List<String>)
    fun showError(message: String)
}

// Presenter
class MainPresenter(private val view: MainView) {
    fun loadData() {
        try {
            val data = repository.getData()
            view.showData(data)
        } catch (e: Exception) {
            view.showError(e.message ?: "Unknown error")
        }
    }
}

// Activity/Fragment implements View
class MainActivity : AppCompatActivity(), MainView {
    override fun showData(data: List<String>) {
        adapter.submitList(data)
    }

    override fun showError(message: String) {
        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
    }
}

Ключевые моменты:

  1. View знает только о Presenter, но не о Model
  2. Presenter не содержит Android-зависимостей
  3. Все UI-действия выполняются через методы View интерфейса