Software Design Model-View-Controller Бреслав А. А. Графический интерфейс пользователя (GUI) Много объектов Много настроек размеры внешний … и расположение вид Асинхронное взаимодействие нет четкой последовательности действий никто не знает,
Download ReportTranscript 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 будут довольно большими Бреслав А. А. Паттерны проектирования. Введение Источники Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес, «Приемы объектно-ориентированного проектирования. Паттерны проектирования» Бреслав А. А. Паттерны проектирования. Введение Вопросы Бреслав А. А. Паттерны проектирования. Введение