In einem Satz
Die wichtigste Idee dieses Videos — in einem Satz
Видео объясняет паттерн Model View Presenter (MVP) для разработчиков на C# и Unity, показывая, почему он лучше классического MVC при работе со сложными пользовательскими интерфейсами и виджетами.
Wichtigste Erkenntnisse aus Model View Presenter, MVP, Модель Вид П
Die wichtigsten Ideen, für dich destilliert
-
Core Idea
MVP работает, потому что переносит ответственность за обработку пользовательского ввода с контроллера на View и Presenter, что позволяет более гибко и удобно управлять сложными UI-элементами, такими как Input Field и чекбоксы. Это важно, потому что классический MVC не учитывает, что View может не только отображать данные, но и принимать управляющие сигналы, что приводит к путанице и усложнению кода. Игнорирование этой идеи приводит к невозможности удобно обрабатывать взаимодействие пользователя с формами и виджетами, особенно в современных приложениях и играх.
-
Введение в MVP и его связь с MVC
MVP является улучшенной версией MVC
-
Проблемы классического MVC с современными UI
В классическом MVC View не должен посылать управляющие сообщения
-
Пример из геймдева и мотивация для MVP
Имя персонажа — часть модели, которую надо считывать из View
-
Основные сущности MVP и их роли
Presenter реагирует на сигналы от View и обновляет Model
-
Сравнение схемы MVP и MVC
В MVP модель стала слоистой и хранит состояния вида
-
Два популярных варианта схемы MVP: Passive View и Supervising Controller
Мартин Фаулер назвал варианты Passive View и Supervising Controller
Vollständige Analyse von Model View Presenter, MVP, Модель Вид П
Minütliche Aufschlüsselung — klicke auf den Zeitstempel
▼
MVP — это паттерн из семейства MVC, возникший из-за усложнения пользовательских интерфейсов и появления виджетов, которые не только отображают данные, но и принимают ввод пользователя. Автор рекомендует сначала ознакомиться с MVC, чтобы лучше понять MVP.
- MVP является улучшенной версией MVC
Das tun: Рекомендуется изучить MVC перед MVP
▼
С появлением виджетов (Input Field, checkbox, toggle) View перестал быть пассивным и стал передавать управляющие сигналы, что не предусмотрено в классическом MVC. Это приводит к проблемам с обработкой пользовательского ввода и взаимодействием с моделью.
- В классическом MVC View не должен посылать управляющие сообщения
▼
В играх с UI-элементами, например, Input Field для имени персонажа, классический MVC не справляется с передачей пользовательского ввода. MVP решает эту проблему, объединяя логику отображения и ввода в View и Presenter.
- Имя персонажа — часть модели, которую надо считывать из View
Das tun: Перенос обработки ввода из контроллера в View и Presenter
▼
MVP разделяет код на три части: Model (данные), View (отображение и передача сигналов) и Presenter (обработка сигналов и изменение модели). Важное отличие — ответственность за пользовательский ввод теперь лежит на View и Presenter, а не только на контроллере.
- Presenter реагирует на сигналы от View и обновляет Model
Das tun: Делегировать обработку пользовательского ввода View и Presenter
▼
В MVC точка входа — контроллер, в MVP — View. View отправляет сигналы Presenter, который интерпретирует их и обновляет модель. Модель теперь может хранить сложные состояния, например, выделение столбца или текст в Input Field.
- В MVP модель стала слоистой и хранит состояния вида
Das tun: Сделать View точкой входа и передавать события Presenter
▼
Разница в том, уведомляет ли модель View напрямую или через Presenter. Passive View (Supervising Controller) проще тестировать, так как View взаимодействует только с Presenter. Вариант с уведомлением View напрямую разгружает Presenter от кода обновления.
- Мартин Фаулер назвал варианты Passive View и Supervising Controller
Das tun: Выбирать вариант схемы в зависимости от приоритетов — тестируемость или качество кода
▼
Для веб-разработчиков удобнее Passive View, так как модель — это просто хранилище на сервере и обновления идут через Presenter. Для Android-разработчиков удобнее Supervising Controller с реактивными событиями.
- Веб-разработчики чаще используют Passive View, Android — Supervising Controller
Das tun: Подбирать схему MVP под тип приложения и платформу
▼
В MVP View содержит ссылку на Presenter и обрабатывает пользовательский ввод, который в MVC обрабатывался контроллером. Presenter имеет ссылку только на модель. Это упрощает распределение ответственности и удобнее для современных UI.
- В MVP View и пользовательский ввод объединены в одну сущность
Das tun: Внедрить ссылку View → Presenter и убрать логику ввода из контроллера
▼
Добавляем функцию реролла одного слота при клике, что сложно реализовать в MVC, но удобно в MVP, так как View обрабатывает клики и посылает сигналы Presenter.
- В игре 5 видов слотов, реролл — бонусный ход
Das tun: Обрабатывать клики на слотах в View и передавать Presenter для реролла
▼
В 2D слотах клики обрабатываются через кнопки, в 3D — через рейкасты и коллайдеры. View вызывает методы Presenter с ID слота для реролла. Это упрощает код и делает его универсальным.
- 3D слоты имеют коллайдеры и скрипты с ID от 0 до 8
Das tun: Реализовать обработку кликов в View и вызов Presenter.onSlotClick
▼
Presenter не содержит ссылку на View (по необходимости можно добавить), имеет публичные методы onSpinButtonClick и onSlotClick, которые вызываются View. Presenter решает, что делать с этими событиями, и обновляет модель.
- Presenter отделён от View, взаимодействие идёт через публичные методы
Das tun: Создать публичные методы в Presenter для обработки событий от View
▼
Модель немного рефакторена: убрана логика бесконечных спинов, добавлен флаг isWin для состояния последнего спина. Главный скрипт изменён — логика обработки спина переехала в View.
- Флаг isWin хранит состояние последнего спина: победа или нет
Das tun: Перенести логику обработки спина в View
▼
MVP — это апгрейд MVC для приложений с большим количеством виджетов и форм. Для простых игр с одной кнопкой (например, Flappy Bird) MVP может быть излишним. Главное — строить архитектуру, удобную для вас, а не слепо следовать канонам.
- MVP удобен при большом количестве UI-виджетов
Das tun: Подстраивать паттерны под свои задачи и комфорт разработки
▼
Автор благодарит за просмотр, приглашает к комментариям и анонсирует будущее видео про MVVM и возможную новую рубрику по фидбэку зрителей.
- Следующее видео — про MVVM
Das tun: Подписаться, задавать вопросы и следить за новыми видео
Schluss mit Wiederanschauen. Fang an zu wissen.
Du hast gerade gelesen, was 13 Minuten Schauen entspricht. Stell dir vor, das für jedes Video zu haben.
⚡ SKIPO kostenlos testenWichtigste Statistiken
Wichtige Zahlen und Datenpunkte aus dem Video
| Kennzahl | Kontext |
|---|---|
| 17m 37s | Длительность видео |
| 5 | Количество видов слотов в примере |
| 0-8 | ID слотов в 3D версии |
| 10 | Пример ограничения бонусного хода после 10 спинов |
Was man nicht tun sollte
- ✗ Игнорировать ввод пользователя в View → MVC становится непригодным для современных UI
- ✗ Использовать MVP для очень простых интерфейсов → излишняя сложность и ненужная архитектура
Hol dir die wichtigsten Erkenntnisse aus jedem Video — wie gerade eben
Erhalte dieselbe Analyse für jedes Video in 30 Sekunden. Kostenlos starten.