Software Design Model-View-Controller Бреслав А. А. Графический интерфейс пользователя (GUI) Много объектов Много настроек размеры внешний … и расположение вид Асинхронное взаимодействие нет четкой последовательности действий никто не знает,
Download
Report
Transcript Software Design Model-View-Controller Бреслав А. А. Графический интерфейс пользователя (GUI) Много объектов Много настроек размеры внешний … и расположение вид Асинхронное взаимодействие нет четкой последовательности действий никто не знает,
Software Design
Model-View-Controller
Бреслав А. А.
Графический интерфейс
пользователя (GUI)
Много объектов
Много настроек
размеры
внешний
…
и расположение
вид
Асинхронное взаимодействие
нет четкой последовательности действий
никто не знает, куда пользователь нажмет
следующий момент
в
Сложное поведение
одно
событие может повлечь много других
событий
Бреслав А. А.
Паттерны проектирования. Введение
Выводы
UI сложен сам по себе
обладает
сложной структурой
обладает сложной логикой
обладает собственными ограничениями,
продиктованными соображениями usability
Смешивание логики UI и логики
приложения вредит и тому, и другому
UI нужно программировать отдельно от
всего остального
Бреслав А. А.
Паттерны проектирования. Введение
Архитектура UI-приложения
Необходимо разделить логику UI и
вычислительную логику («бизнес-логику»)
приложения
Логика приложения может существовать без UI
или возможны разные варианты UI для одной и той же
логики
в общем случае не может существовать без
логики приложения
UI
Для этого применяется архитектура
Model-View-Controller
Бреслав А. А.
Паттерны проектирования. Введение
Model-View-Controller
Появилась в стандартной библиотеке
SmallTalk
Описана в “Gang of Four”
Используется в
MFC
(Document-View)
Swing (Data Models)
…
Бреслав А. А.
Паттерны проектирования. Введение
Структура MVC
Модель (Model)
Содержит всю бизнес-логику приложения
Может существовать автономно
Не знает об остальных частях архитектуры
Представление (View)
Отвечает
за отображение данных модели для
пользователя
Принимает пользовательский ввод
Контроллер (Controller)
Отвечает
за взаимодействие модели и
представления
Часто интегрируется с представлением
Бреслав А. А.
Паттерны проектирования. Введение
Один к одному
Одна модель, одно представление
Нужно
только разделить ответственности
Никто, кроме единственного представления
не может менять модель
Связи
Представление читает данные из модели
Представление изменяет данные в модели
Объекты представления хранят ссылки на
соответствующие объекты модели
Бреслав А. А.
Паттерны проектирования. Введение
Один ко многим
Одна модель, много представлений, и
все могут изменять модель
Все
представления читают данные из
модели
Все представления могут изменять модель
Модель оповещает все представления об
изменениях (Listener)
Бреслав А. А.
Паттерны проектирования. Введение
Один писатель, много читателей
Для одной модели несколько представлений,
но только одно из них может изменять
модель
Все
представления читают данные из модели
«Писатель» изменяет модель
В принципе «писателем» может быть не представление,
а какой-то другой источник информации
Модель
оповещает «читателей» о том, что данные
изменились (Listener)
Бреслав А. А.
Паттерны проектирования. Введение
Примеры
Бреслав А. А.
Паттерны проектирования. Введение
Тестирование UI
Тестировать UI трудно
трудно
воспроизвести действия
пользователя
трудно проверить реакцию системы
Частичное решение – подмена
представления
Создаем
тестовое представление, не
меняя контроллер и модель
Тестовое представление эмулирует ввод и
проверяет реакцию системы
Бреслав А. А.
Паттерны проектирования. Введение
Три понимания MVC
Существенные отличия: понимание того, что такое
контроллер
«Чистая» реализация
Реализация, описанная в GoF
Все связи между моделью и представлением находятся в
контроллере
Контроллер реализует только реакции на действия
пользователя
Представление читает данные из модели непосредственно
Модель оповещает предсталение
Реализация, использованная в MFC
Контроллер сливается с представлением
Бреслав А. А.
Паттерны проектирования. Введение
«Чистая» реализация MVC
Модель не знает о контроллере
Модель не имеет непосредственной
связи с представлением
Представление не знает о контроллере
Представление не имеет
непосредственной связи с моделью
Контроллер полностью реализует связь
между моделью и представлением
Бреслав А. А.
Паттерны проектирования. Введение
Оповещение в «чистой» MVC
model
controller
view
Input
Update
Changed
Update
Update
Бреслав А. А.
Паттерны проектирования. Введение
view
Плюсы «чистой» MVC
Минимизация зависимостей
все
связи заключены внутри контроллера
Повторное использование
представлений
можно
расценивать каждое отображаемое
поле как отдельную модель и собрать
композитный контроллер, объединяющий
контроллеры для таких микро-моделей
Бреслав А. А.
Паттерны проектирования. Введение
Минусы «чистой» MVC
Значительное дублирование структуры
Представление
имеет структуру модели
Методы контроллера повторяют логику
представления
Сложность реализации
Много
классов
Много оповещений
Циклы оповещений
Бреслав А. А.
Паттерны проектирования. Введение
MVC, изложенная в GoF
Контроллер реализует только реакции
на действия пользователей
в
частности, модифицирует модель
Модель оповещает представление
Представление читает данные из
модели (то есть знает о модели)
Бреслав А. А.
Паттерны проектирования. Введение
Оповещение в GoF-MVC
model
controller
view
Input
Update
Changed
Changed
Бреслав А. А.
Паттерны проектирования. Введение
view
Плюсы GoF-MVC
Контроллер легко подменить даже во
время выполнения
контроллер
является стратегией
Реализация довольно проста
Бреслав А. А.
Паттерны проектирования. Введение
Минусы GoF-MVC
Представление жестко связано с
моделью
Невозможно повторное использование
представлений
Бреслав А. А.
Паттерны проектирования. Введение
Версия MVC из MFC
(Document-View)
Представление и контроллер
реализуются одним классом
Знают
друг о друге
Знают о модели
Модель оповещает представлениеконтроллер
Бреслав А. А.
Паттерны проектирования. Введение
Оповещение в MFC-MVC
model
view/controller
Input
Update
Changed
Changed
Бреслав А. А.
Паттерны проектирования. Введение
view/controller
Плюсы MFC-MVC
Исключительная простота реализации
Мало классов
Мало оповещений
Бреслав А. А.
Паттерны проектирования. Введение
Минусы MFC-MVC
Логика контроллера не отделена от UI
Классы View/Controller будут довольно
большими
Бреслав А. А.
Паттерны проектирования. Введение
Источники
Э. Гамма, Р. Хелм, Р. Джонсон, Дж.
Влиссидес,
«Приемы объектно-ориентированного
проектирования. Паттерны
проектирования»
Бреслав А. А.
Паттерны проектирования. Введение
Вопросы
Бреслав А. А.
Паттерны проектирования. Введение