Обрабатывает ли контроллер все взаимодействие с моделью в MVC?

Я создаю игру pacman, используя шаблон MVC. Согласно этой диаграмме в Википедии модель и представление взаимодействуют .

"Примечание: сплошные линии указывают на прямую связь, а пунктирные линии указывают на косвенную связь"

Насколько я понимаю, все обязательно проходит через контроллер? Скажем, например, когда игрок перемещается или пользователь щелкает, чтобы добавить в корзину, разве это не обрабатывается контроллером, а соответствующие данные в модели манипулируются контроллером?

Я не понимаю, почему представление будет напрямую взаимодействовать с моделью?

Спасибо

Адам


person Adam Taylor    schedule 15.01.2009    source источник


Ответы (3)


Представление получает данные, которые оно должно отображать, из модели. (например: список товаров в корзине)

person Simon Groenewolt    schedule 15.01.2009

Это правда, что будет очень мало причин для изменения вашей модели из вашего представления (это нет-нет), но вы можете в конечном итоге получить доступ (как при чтении) к моделям из вашего представления.

Давайте сделаем псевдокод.

Допустим, у вас есть модели Player и Game.

Ваш контроллер может сделать что-то вроде:

player1 = new Player();
player1.setLives(3);
player1.setScore(0);
player1.setPosition(0, 0);
game = new Game();
game.addPlayer(player1);
game.launch();

Затем ваше представление может сделать что-то вроде:

foreach (game.getPlayers() as player) {
   gameBoard.draw(pacmanGlyh, player.getPosition());
}

Вы видите, что используете модель из представления.

Но имейте в виду, что философия реализации MVC немного отличается от одного программиста к другому. Некоторые могут порекомендовать использовать шаблон наблюдателя в зависимости от того, что вы делаете. Конечная цель MVC на самом деле состоит в том, чтобы отделить вашу бизнес-логику от пользовательского интерфейса, упростив вашу жизнь при обслуживании и рефакторинге, а также сохранив ваш код в чистоте.

person lpfavreau    schedule 15.01.2009

Нет, представление считывает свои данные из модели (обычно с использованием шаблона наблюдателя). PAC (представление-абстракция-контроллер) — хороший пример шаблона на основе MVC, в котором используется шаблон посредника — контроллер передает сообщения между представлением и моделью.

person Draemon    schedule 15.01.2009