Аномалия (с точки зрения MVC), которая затрудняет приведение этого проекта в соответствие с MVC, заключается в том, что вы хотите отображать информацию, которая, согласно вашей концепции, «не живет в модели». В MVC нет такого понятия, как «информация, которая не содержится в модели»: его концептуальный корень — «модели содержат всю информацию, представления просто выполняют задачи представления, контроллеры опосредуют взаимодействие с пользователем». ".
Вполне возможно, что отображаемая вами информация не «соответствует никаким бизнес-данным», но (в мировоззрении MVC) это не означает, что информация «независима от модели», потому что такой вещи нет - это просто означает, что вам нужен другой класс модели (помимо того, что вы используете для хранения «бизнес-данных»), чтобы хранить эти «некоммерческие» данные!-)
Таким образом, когда пользователь «создает экземпляр виджета» (создает представление для отображения каталога, предположительно, посредством какого-либо действия пользователя над каким-либо основным/координирующим представлением, возможно, над другим существующим виджетом, если «клонирование» является одним из способов создания экземпляра виджета), контроллер отвечает за создание как объекта виджета, так и экземпляра «класса модели отображения каталога» и устанавливает связь между ними (обычно путем установки в виджете ссылки на соответствующий экземпляр модели), а также сообщает модели делать его первоначальная загрузка информации. Когда действие пользователя над виджетом подразумевает действие над моделью, контроллер извлекает из виджета, участвующего в событии, ссылку на экземпляр модели и отправляет этому экземпляру соответствующий запрос (запросы) (дело модели состоит в том, чтобы позволить представлению [s] заинтересованы в том, чтобы знать об изменениях в информации - обычно по какому-то образцу наблюдателя; это определенно не обязанность контроллера снабжать представление информацией - это действительно очень отличный от MVC подход!).
Стоят ли вложения в архитектуру, требуемые MVC, в вашем случае по сравнению с более грубым подходом, когда информационные потоки менее безупречны, а модели, которая должна быть, просто не существует? Я прагматик и точно не преклоняюсь перед алтарем MVC, но думаю, что в этом случае (относительно небольшие) вложения в здравую, понятную архитектуру действительно могут с лихвой окупиться. Это вопрос представления вероятных направлений изменений — например, какую функциональность, которая вам не нужна прямо сейчас (но вполне может появиться вскоре после этого), будет тривиально добавить, если вы пойдете правильным путем MVC, и быть кошмаром специальных кладжей в противном случае (или потребовать несколько болезненного рефакторинга всей архитектуры)? Всевозможные вещи, от желания отображать одну и ту же информацию о каталоге в разных виджетах до наличия более умной модели «просмотра информации о каталоге», которая может автоматически обновляться при необходимости (и предоставлять новую информацию непосредственно заинтересованным представлениям через обычный шаблон наблюдателя , без участия контроллера), естественны и тривиально просты с MVC (эй, в конце концов, в этом вся смысл MVC, так что это неудивительно!-), неуклюжи и хрупки с специальная архитектура, позволяющая срезать углы - небольшие инвестиции, большая потенциальная прибыль, дерзайте!
По тону предыдущего абзаца вы можете заметить, что я также не преклоняюсь перед алтарем «экстремального программирования» — как прагматик, я сделаю небольшой «дизайн заранее» (особенно в условия создания чистой, гибкой, расширяемой архитектуры с самого начала, даже если это не является необходимым прямо сейчас) — именно потому, что, по моему опыту, небольшая предусмотрительность и очень скромные инвестиции, особенно на архитектурном фронте многократно окупается в течение жизни проекта (в таких различных валютах, как масштабируемость, гибкость, расширяемость, ремонтопригодность, безопасность и т. д., хотя не все из них применимы к каждому проекту — например, в вашем случае безопасность и масштабируемость на самом деле не являются проблемой ... но другие аспекты, вероятно, будут иметь значение!-).
В общем, позвольте мне отметить, что моя прагматичная позиция не оправдывает чрезмерную энергию и время, потраченные на выбор архитектуры (по определению слова «чрезмерная»; -) - знакомство с несколькими фундаментальными архитектурными шаблонами (и MVC, безусловно, является одним из них) часто снижает первоначальные инвестиции с точки зрения времени и усилий - как только вы поймете, что такая классическая архитектура хорошо вам послужит, как в этом В этом случае действительно легко понять, как это реализовать (например, отказаться от идеи «MVC без M»!-), и на самом деле это не требует намного больше кода по сравнению с самыми нелепыми, нестандартными ярлыками!- )
person
Alex Martelli
schedule
15.11.2009