Модель-Представление-ViewModel. Паттерн разделяет пользовательский интерфейс (Представление) и бизнес-логику (Модель) с помощью промежуточного слоя ViewModel.
- Модель: Представляет данные и логику предметной области. Не зависит от UI.
- Представление: Отображает данные из ViewModel и отправляет действия пользователя в ViewModel. Не содержит бизнес-логики.
- ViewModel: Содержит данные и логику для Представления, преобразуя данные Модели в формат, удобный для отображения. Оповещает Представление об изменениях данных и обрабатывает действия пользователя, взаимодействуя с Моделью.
Преимущества MVVM:
- Разделение ответственности: Четко отделены UI, логика отображения и бизнес-логика.
- Тестируемость: ViewModel легко тестировать независимо от UI.
- Поддерживаемость: Изменения в UI или бизнес-логике реже влияют друг на друга.
- Повторное использование: ViewModel может использоваться разными Представлениями.
- Привязка данных (Data Binding): Упрощает синхронизацию между Представлением и ViewModel.
Использование в Frontend:
Используется в фреймворках вроде Vue.js, React (с некоторыми адаптациями, например, используя хуки и стейт-менеджеры), Angular (по своей сути близок к MVVM).
Пример (упрощенный Vue.js):
javascript