Здравствуйте, adontz, Вы писали:
A>Да, когда он выделяется. А когда мы разбиваем один объект на кучу более мелких, потому что "так сказал пророк", получая в результате пролему их взаимодействия, то надо не контекст выделять, а менять дизайн.
Нет. Я взял гипотетическую задачу предложенную тобой, гипотетически помыслил и привел логику получения гипотетического решения на основе представленных тобой данных, и на предположении что количество отображаемых сущностей может изменяться. В свете артефактов предоставленных тобой и данного предположения задача решается данным паттерном как родная. При этом я не учитывал артефакты о которых я не знаю, и соответвенно как сделать данную задачу в жизни или есть лучшие решения точно сказать нельзя.
Проблемы взаимодействия я здесь не вижу. Вижу только ее решение.
1. Модель абсолютно пассивна и плохо представляет для чего ее пользуют. Ее задача предоставить данные. Представления полностью изолированы от модели, и соответвенно любое изменение модели не отражается на рисовалках. Как собственно верно и обратное утверждение.
2. Добавление новой отображаемой сущности упрощается.
2.1 Если сущность должна отображаться уникально, то велика вероятность что она может быть описана уже готовым интерфейсом, как то (координаты, название), (путь), (координаты, иконка). То есть, остается реализовать только класс рисовалку поддерживающий данный интерфейс. Контроллер ведь оперирует только интерфейсом.
2.2 Если есть уже готовая рисовалка но при обработке информации есть изменения, то наша задача ограничется только созданием нового контроллера.
3. Достаточно легко строить новые формы на основе уже существующих кирпичей.
4. Система тестируема. Мы не можем автоматизировано построить проверку как работают контроллеры. И мы можем раздельно проверить как рисуются рисовалки.
A>А тут не будет повторяющегося кода
Карта рисуется OpenGL, список городов это ListView.
Oops. Только что это был DirectX. Хотя это однокомпозиционно, поскольку вывод зависит только от рисовалок. Можно сделать рисовалки, которые рисуют в DirectX, OpenGL, в формы или в log в виде тупого текста. Ни модель, ни контроллеры от этого практически не меняются. (хотя в контроллерах я допускаю что возможна некоторая несущественная зависимость.) И контекст вывода является пререгативой рисовалок а не контроллеров. Посему возможно контроллерам о нем и знать то не надо.
A>+1. MVC тоже навязывает абстрактные сущности Controller и View, которые очень просто объединить в Control.
Но тогда это уже не будет MVC.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>