【问题标题】:MVC - Controller vs Model ResponsibilitiesMVC - 控制器与模型职责
【发布时间】:2013-11-29 04:20:02
【问题描述】:

我正在使用 gui 控制台进行文本冒险。我现在设置了它,以便用户使用视图输入文本(例如“检查键”、“环顾四周”等)。然后使用侦听器将这些数据从视图发送到控制器。将文本发送到控制器后,我有点卡住了。遵循 MVC 模型,我应该将文本从控制器发送到模型并让模型解析它并弄清楚如何处理它,还是模型应该只是控制器解析数据的一种“存储” ,只是告诉模型基本命令?例如,如果“pickup key”被发送到控制器,控制器应该告诉模型简单地将钥匙添加到玩家库存并将其从房间中移除,还是应该将整个文本发送到模型进行处理?

我知道这是一个非常基本的 MVC 问题,即使在阅读了相当多的内容并查看了一些解释模型的流程图之后,我仍然对 MVC 的每个部分的具体角色感到困惑。

【问题讨论】:

  • 模型应该有程序的大脑。试着想想如果这个程序是一个基于文本的游戏、一个 Swing GUI、一个智能手机游戏、一个基于互联网的游戏,它的不变性是什么。在所有这些情况下都不会改变的东西很可能在模型中。
  • @HovercraftFullOfEels 所以控制器只是在模型和视图之间传递数据,但从未真正接触过数据?它只是介于两者之间的一层,允许分别测试和/或使扩展更容易?
  • 好吧,这取决于,有时模型不能做所有事情,例如,如果一个动作依赖于一个旧动作,我相信类 Action 不能拥有所有的逻辑,或者如果一个动作取决于另一个玩家在网络上抛出的动作:网络代码不会在模型中。
  • @HovercraftFullOfEels 是正确的;正如here 所讨论的,Swing MVC 是以模型为中心的。

标签: java swing model-view-controller


【解决方案1】:

有很多方法可以回答这个问题。 这个答案可能不符合标准,这只是我的理解。

我认为创建一个模型来表示实体以及操作。然后会有控制器或作为请求处理程序的调用来接受请求以及数据,然后决定从模型中使用什么操作来成功处理请求。

由于数据管理是模型的责任,所以你可以有另一个层来处理存储并将其与模型一起使用或在模型本身中处理存储。

【讨论】:

    【解决方案2】:

    模型是持久存储,即数据库。 控制器过程是从用户到模型的信息 视图将模型的信息显示给用户,并接受用户的输入。

    【讨论】:

    • 模型不一定是持久的。
    • 我应该先对元素做一个非常基本的描述。确实,模型不必是持久的,我也没有包含任何关于视图模型的内容。只是对MVC部分的一个非常基本的解释
    • 在开始“回答”问题之前,请先了解该主题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 2016-08-13
    • 2021-12-31
    • 2013-03-25
    • 1970-01-01
    • 2011-07-18
    相关资源
    最近更新 更多