Архитектурный паттерн, разделяющий приложение на три взаимосвязанные части:
- Model: Представляет данные и бизнес-логику. Не имеет информации о View или Controller. Уведомляет View об изменениях своих данных (через Observer, Listener).
- View: Отображает данные из модели и реагирует на действия пользователя. Не содержит бизнес-логики и не взаимодействует с Model напрямую. Отправляет запросы контроллеру при взаимодействии пользователя.
- Controller: Связывающий посредник между Model и View. Обрабатывает пользовательский ввод из View, обновляет Model и выбирает View для отображения.
Плюсы:
- Разделение ответственности.
- Улучшенная тестируемость (Model и Controller тестируются независимо).
- Возможность повторного использования (особенно Model).
Минусы:
- Становится громоздким для сложных UI (толстые контроллеры - "массивные контроллеры").
- Взаимодействие между View и Model может быть запутанным (через Controller).
- Тесная связь между View и Controller (в Android Activity часто выступает в обеих ролях).
В Android, Activity или Fragment часто выполняет функции как View, так и Controller, что усложняет разделение. В чистом виде MVC редко применяется в Android, чаще используются производные паттерны, такие как MVP или MVVM.