О контроллерах
Выбери формат для чтения
Загружаем конспект в формате pptx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 7. О контроллерах
О системных событиях и сообщениях
Что такое модель, представление и контроллер
Когда и как применять контроллеры
Антипаттерн: Fat Stupid Ugly Controllers
Что, если интерфейса нет совсем?
Системное событие
Системное собы т ие (system event)
— это событие высокого уровня,
генерируемое внешним исполнителем
(событие с внешним входом).
Системные события связаны с
системны ми операциями (system
operation), т.е. операциями,
выполняемыми системой в ответ на
события.
Кто должен отвечать за обработку
входных системных событий?
• Класс предст авляет всю систему в
целом, устройство или подсистему
(внешний контроллер). Может называться
System, SystemController, ApplicationController
• Класс предст авляет сценарий
некоторого прецедент а, в рамках
которого выполняется обработка всех
системных событий, и обычно называется
<Прецедент>Наndlеr,<Прецедент>Coordinator,
<Прецедент>Session(контроллер прецедента или
контроллер сеанса).
Система в целом
Модель
Модель представляет знания о
предмет ной област и: данные и
методы работы с этими данными.
Реагирует на запросы, изменяя своё
состояние.
Не содержит информации, как эти
знания можно визуализировать.
Модель
Представление
Отвечает за отображ ение
инф ормации (визуализацию). Часто
в качестве представления выступает
форма (окно) с графическими
элементами.
Представление
Представление
Контроллер
Конт роллер (controller) — это объект,
не относящийся к интерфейсу
пользователя и отвечающий за
обработку системных событий.
Контроллер определяет методы для
выполнения системных операций.
Контроллер прецедента и контроллер
сеанса
• Для всех системных событий в рамках
одного сценария прецедент а
используется один и тот же классконтроллер.
• Сеанс — это реализация
последовательности взаимодействий с
исполнителем. Сеансы могут иметь
произвольную длину, но зачастую
организованы в рамках прецедента (сеансы
прецедента).
Идеология контроллеров:
системны е собы т ия не обрабат ы ваются
на уровне предст авления!
Распределение обязанностей
В процессе анализа поведения системы
системные операции относятся к классу
System. Однако это не означает, что их
выполняет программный класс System.
Более того, обязанности по выполнению
системных операций обычно
возлагаются на класс Controller.
Кто же будет добавлять продажу?
Вариант 1: один конт роллеробъект
Вариант 2: конт роллеры
прецедентов
Преимущества контроллеров
• Улучшение условий для повторного
использования компонентов (за счет
уменьшения связности)
• Контроль состояния прецедента
• Отделение бизнес-логики от системной
логики
Fat Stupid Ugly Controllers
• Включить в модель только данные
• Всю бизнес-логику процесса упаковать
в один контроллер
• Добавить туда всю логику
материализации/дематериализации
Тонкие контроллеры
• Оставить бизнес-логику модели
• Оставить контроллеру приём
системных сообщений и запросов
• Предоставить контроллеру доступ к
модели и возможность делегировать
сообщения
Родственники контроллера
• Command (Команда) — в системах обработки сообщений
каждое сообщение может представлять и обрабатывать
отдельный объект Command.
• Facade (Фасад) — выбор объекта, представляющего всю
систему или организацию в качестве внешнего контроллера.
• Layers (Слои) — согласно шаблону Layers, логика
реализации размещается в слое реализации, а не в слое
представления.
• Pure Fabrication (Чистая синтетика) — еще один шаблон
GRASP, который подразумевает создание искусственного
класса, не имеющего аналога в предметной области.
Элементом шаблона Pure Fabrication является контроллер
прецедента.
Системы обработки сообщений и
шаблон «команда»
• Команда (Command)
• Исполнитель команд (Command
Processor)
Команда