Что такое MVP и как это использовать
MVP — это паттерн, который используют многие разработчики, даже если не догадываются об этом. Может, вы один из них?
vlada_maestro / shutterstock
MVP — это паттерн программирования графических интерфейсов. В нём приложение делится на три компонента:
- Model (Модель) работает с данными, проводит вычисления и руководит всеми бизнес-процессами.
- View (Вид или представление) показывает пользователю интерфейс и данные из модели.
- Presenter (Представитель) служит прослойкой между моделью и видом.
Как и другие подобные паттерны (MVC, MVVM), MVP позволяет ускорить разработку и разделить ответственность разных специалистов; приложение удобнее тестировать и поддерживать.
Чаще всего его используют разработчики мобильных приложений, однако он гораздо популярнее, чем может показаться. Дело в том, что этот паттерн активно применяется в вебе, хотя там его и называют MVC:
Как работает MVP
На схеме выше видно, что приложение, созданное по принципам MVP, работает с помощью связи модели, вида и представителя. Происходит это так:
- Вид строит интерфейс и добавляет в него данные из модели.
- Пользователь видит информацию и взаимодействует с интерфейсом.
- Вид перехватывает события и передаёт (делегирует) их представителю.
- Представитель обрабатывает данные (не всегда) и передаёт их модели.
- Модель выполняет какие-то операции и обновляется (меняет те или иные свойства).
- Представитель получает обновлённую модель и передаёт её виду.
- Вид строит интерфейс с новыми данными.
Основное отличие MVP и MVC в том, что в MVC обновлённая модель сама говорит виду, что нужно показать другие данные. Если же этого не происходит и приложению нужен посредник в виде представителя, то паттерн стоит называть MVP.
Всё это можно сравнить с работой издательства:
- Автор готовит текст (модель).
- Текст получает издатель (представитель).
- Если с текстом всё в порядке, издатель передаёт его в отдел вёрстки (вид).
- Верстальщики готовят книгу, которую начинают продавать читателям (пользователи).
- Если пользователи как-то реагируют на книгу, например, пишут письма в издательство, то работа может начаться заново. Допустим, кто-то может заметить в книге неточность, тогда издатель передаст информацию автору, автор её обновит и так далее.
Конечно, это не точный алгоритм работы издательства, но для иллюстрации принципов MVP его достаточно.
Пример MVP-приложения
Так как MVP служит для упрощения разработки графических интерфейсов, рассмотреть его можно на примере WPF-приложения. В качестве вида будут выступать файлы MainWindow.xaml (разметка интерфейса) и MainWindow.xaml.cs (обработчик событий).
Начать можно с создания интерфейса авторизации:
Вот что должно получиться:
Теперь можно приступить к файлу MainWindow.xaml.cs:
Тут уже заложена необходимая связь между компонентами. Дальше стоит рассмотреть код представителя:
Он получает данные, обрабатывает их и передаёт модели. Модель обновляется, а представитель возвращает её виду.
Вот что происходит в модели:
Тут появляется новая сущность — User. Этот и подобные классы используются в качестве данных, с которыми работает модель. Таких классов может быть сколько угодно: работа с ними ведётся так же, как и вне паттерна MVP. Вот и сам класс User:
Теперь можно проверить, как это всё работает:
Заключение
Тот, кто читал другие наши статьи о паттернах разработки графических интерфейсов, мог заметить, что во всех них приложение делится на 3 компонента, которые создаются отдельно. Такой подход позволяет быстрее написать отдельные части программы и при этом сделать их более простыми для понимания.