我正在使用MVC模式創建pacman遊戲。根據this diagram on wikipedia模型和視圖交互。控制器是否處理與MVC中模型的所有交互?
「注:實線表示的直接關聯,而虛線表示的間接的關聯」
從我的理解現在,當然一切都通過控制器?比如說,玩家移動或用戶點擊添加到購物車,那麼是否會被控制器處理並且控制器操縱模型中的適當數據?
我看不到爲什麼視圖會直接與模型相互作用?
由於
亞當
我正在使用MVC模式創建pacman遊戲。根據this diagram on wikipedia模型和視圖交互。控制器是否處理與MVC中模型的所有交互?
「注:實線表示的直接關聯,而虛線表示的間接的關聯」
從我的理解現在,當然一切都通過控制器?比如說,玩家移動或用戶點擊添加到購物車,那麼是否會被控制器處理並且控制器操縱模型中的適當數據?
我看不到爲什麼視圖會直接與模型相互作用?
由於
亞當
視圖得到它應該從模型顯示數據。 (例如:購物車中的物品清單)
的確,從您的視圖中修改模型的原因確實很少(這是一個禁忌),但您最終可能會訪問(如閱讀)你的觀點的模型。
讓我們來做一些僞代碼。
假設你有一個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的哲學,從一個程序員到另一個程序員略有不同。有些人可能會建議使用observer pattern,這取決於你在做什麼。 MVC的最終目標是將您的業務邏輯與用戶界面分離開來,使您在維護和重構時更輕鬆,並且保持代碼清潔。
不,視圖從模型中讀取數據(通常使用觀察者模式)。 PAC(presentation-abstraction-controller)是使用中介模式的基於MVC的模式的一個很好的例子 - 控制器在視圖和模型之間傳遞消息。