Объекты модели должны быть отделены от представления. За способ представления модели отвечает уровень представления. Модель может попросить представление отобразить себя. Но сделать это она должна обобщенным способом, чтобы не быть привязанным к одному типу представления.
Представление не должно нести ответственность за сохранение информации.
С помощью контроллеров происходит проверка, что представление имеет право обращаться к определенным объектам модели, а также модель сообщает представлению об изменениях.
Контроллеры интерпретируют действия над элементами интерфейса в действия над моделью.
Возможно объединение ролей: view-controller или model-controller.
Классическая реализация MVC:
Такой способ можно реализовать в Cocoa, использую технологию bindings, однако это свяжет представление с моделью, а они должны наиболее удобны для повторного использования. Поэтому в Cocoa всё взаимодействие идет через контроллер.
Напоминание: контроллеры могут быть медиаторами и координаторами.
Медиаторы (от NSController) просто переправляют запросы с помощью target-actions.
Координаторы являются делегатами окон и объекта приложения, поэтому они могут находиться в цепочке (responder chain).
Обычно координаторы владеют медиаторами, которые сохраняются в nib-файл.
Design Guidelines for MVC Applications
В качестве контроллера можно использовать класс производный от NSController или от NSObject.
Если желательно объединить роли уровней, то нужно определить с главной ролью и реализовать ее в классе, а дополнительные роли добавить с помощью категорий.
Наименее повторно используемы контроллеры, наиболее - классы представлений и модели.
NSController дает дополнительные возможности по сравнению с простой привязкой. Например, возможность отката изменений.
Предпочтительные зависимости:
- представление не должно зависеть от модели
- представление не должно зависеть от медиатора
- модель может зависеть только от другой модели
- медиатор не должен зависеть от модели
- медиатор не должен зависеть от представления или от координатора
- координатор зависит от всех других участников.
Model-View-Controller in Cocoa (Mac OS X)
Document architecture.
Контроллер для всего приложения - NSDocumentController.
Контроллер для каждого из окон - NSWindowController.
Контроллер+модель - NSDocument.
Bindings.
NSController
Комментариев нет:
Отправить комментарий