【问题标题】:MVC pattern; my model class needs user input, but I know it shouldn't ask either the user or the controllerMVC 模式;我的模型类需要用户输入,但我知道它不应该询问用户或控制器
【发布时间】:2018-02-16 12:23:27
【问题描述】:

我正在使用 MVC 模式创建一个简单的二十一点游戏。

主控制器叫Game,主视图叫BlackjackView,我目前使用的实现是ConsoleView,主模型类叫Blackjack

这是一些我不明白如何实现下一部分的简化代码:

Game.java

public class Game {
    private Blackjack blackjack;
    private BlackjackView view;

    public static void main(String[] args) {
        Game game = new Game();
        game.start();
    }

    private void start() {
        blackjack = Blackjack.initializeGame();
        view = new ConsoleView(blackjack);

        blackjack.takeTurns();
    }
}

二十一点.java

import java.util.*;

public class Blackjack {
    private List<Person> players = new ArrayList<Person>();

    public static Blackjack initializeGame() {
        return new Blackjack();
    }

    public void takeTurns() {
        for (Person player : players) {
            // ask player to 'hit' or 'stay'
        }
    }
}  

我无法理解如何做到这一点,因为Blackjack 应该与询问用户或获取用户输入无关。

我的理解正确,我的视图类必须显示问题('玩家,你想打还是留下?')并且我的控制器类必须处理输入。

我想将Game 的引用传递给Blackjack,所以我可以要求它要求用户输入,但我知道我不应该这样做。

【问题讨论】:

  • 为什么不将视图传递给二十一点,以便它可以要求视图从用户那里获取输入?
  • 模型不应该对视图有任何了解。

标签: java oop model-view-controller


【解决方案1】:

根据您向我们展示的内容,您实际上并没有创建控制器或视图。模型不应该“要求”任何人做任何事情。这是一个选择和告诉的过程。

输入视图告诉控制器提供什么输入。控制器选择模型实例,然后告诉模型要处理哪些输入。然后控制器选择下一个视图,然后告诉视图它使用了哪个模型实例。然后视图向模型询问结果,并根据视图逻辑格式化结果。然后,该视图要么等待输入,要么调用输入视图来执行此操作。循环重复。

【讨论】:

  • 好吧,我现在有点明白了。但是,对我来说,如果这个序列以你的第二句话开头更有意义:“控制器选择模型实例,......”这是正确的吗?我已经用你的答案完成了这个项目,即posted here.
  • 控制器如何在不知道需要做什么的情况下选择模型实例?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多