Объясните мне пожалуйста последний пункт. Написано, что представление и контроллеры не должны взаимодействовать друг с другом. Как тогда работают контроллеры я не понимаю. Контроллер должен как-то узнать, что изменился текст в текстовом поле, например. Как он это узнает? Ведь это через контроллер в модель должны попадать данные.
>Ведь это через контроллер в модель должны попадать данные.
Данные в модель могут попадать и через view (судя по диаграмме). Модель обновляется, срабатывает обозреватель контроллера, контроллер получает управление и может делать что-то с этими данными.
Я в своё время сделал компромиссный вариант MVC на основе образца Observer для J2ME-приложения. Может кто выскажет критические замечания моему подходу, буду признателен.
Почему «компромиссный»? Потому что не все тулкиты позволяют реализовать «правильный» MVC из-за каких-либо ограничений архитектуры базовых библиотек.
Вот простенькая интерпретация того, что получилось.
Модель представляла собой, пользуясь терминологией статьи, «Доменный объект», связанный с Представлениями только событийным интерфейсом (Представления «подписывались» на событие изменения состояния Модели). Модель имела свою собственную линию жизни (нить исполнения, thread) и не зависела ни от чего другого, жила своей жизнью — эволюционировала, так сказать, с определёнными параметрами (скорость движения, направление движения и текущие координаты). При изменении координат рассылалось уведомление всем «подписчикам» — Представлениям.
Другая часть — «Модель представления» (Presentation model, пользуясь терминологией статьи) — «зашита» в объект формы «Настройки». Устанавливает скорость в Модели после подтверждения ввода пользователя. Это данные «сессии» (см. первую часть статьи).
Контроллёр по идее должен был контролировать все нажатия клавиш и управлять Моделью (менять её состояние). Но все события от клавиатуры перехватываются базовым элементом Canvas (графическим Экраном) — так решили разработчики платформы J2ME — а транслировать команды управления в Контроллёр (мидлет) накладно и неэффективно, поэтому состояние Модели (направление движения и скорость) задавалось в коде объекта-потомка Canvas в зависимости от нажатых клавиш.
Вот, в общем-то, простейшая концептуальная реализация одной из видений MVC. Критикуйте.
Martin Fowler — GUI Architectures. Часть 2