Ответ
MVC (Model-View-Controller)
Классический паттерн, где Controller обрабатывает пользовательский ввод, обновляет Model и управляет View. В Android Activity/Fragment часто выступает как Controller и View, что приводит к раздуванию кода.
MVP (Model-View-Presenter)
Активно использовался до MVVM. Presenter выступает посредником между View и Model, уменьшая связность. View пассивна и обновляется через интерфейсы.
MVI (Model-View-Intent)
Основан на реактивном подходе. Intent — намерение пользователя, State — неизменяемое состояние UI. Пример с Kotlin Flow:
sealed class State { ... }
sealed class Intent { ... }
viewModelScope.launch { intents.collect { processIntent(it) } }
Clean Architecture
Не паттерн, а подход с разделением на слои (Data, Domain, Presentation). Используется вместе с MVVM/MVI.
VIPER (View-Interactor-Presenter-Entity-Router)
Для сложных iOS-приложений, редко в Android. Разделяет логику на мелкие компоненты.
Выбор зависит от сложности проекта и команды. MVVM/MVI популярны в Android из-за поддержки Jetpack.