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 будут довольно
большими

Бреслав А. А.
Паттерны проектирования. Введение
Источники

Э. Гамма, Р. Хелм, Р. Джонсон, Дж.
Влиссидес,
«Приемы объектно-ориентированного
проектирования. Паттерны
проектирования»
Бреслав А. А.
Паттерны проектирования. Введение
Вопросы
Бреслав А. А.
Паттерны проектирования. Введение