【问题标题】:MVC with tabs (linking gui and data classes)带标签的 MVC(链接 gui 和数据类)
【发布时间】:2014-01-19 08:17:09
【问题描述】:

我正在计划一个使用 Swing 的石头剪刀布“游戏”,它将遵循 MVC 设计。这样做的目的是更多地了解 MVC 的工作原理,而不是有用/实用。我现在的设计有一个表单,允许用户创建新游戏,然后游戏出现在 JTabbedPane 中,这样用户可以一次运行多个游戏。我对这个系统有 2 个问题:

石头剪刀布逻辑应该在模型中处理,还是应该在控制器中处理?我有一个代表不同选择的枚举和一个算法来找出谁赢了,但我对实际应该在哪里处理有点困惑。

我的第二个问题可能有点令人困惑。我现在计划的方式是我有一个名为 GamePanel 的 JPanel,每个游戏都有其中一个作为 TabbedPane 中的选项卡。将我的 GamePanel 与来自模型的游戏数据链接的“正确”方式是什么?在最简单的情况下,每个游戏都有一个 GamePanel 和一个用于存储数据的 Game 对象。在控制器中将这些链接在一起的正确方法是什么,以便通过事件系统我可以轻松地获取用户输入并基于它修改正确的游戏?首先想到的是 HashMap(GamePanel, Game) 但这似乎不是很优雅。

【问题讨论】:

    标签: java swing model-view-controller


    【解决方案1】:

    是在模型中处理石头剪刀布逻辑,还是在控制器中处理逻辑?

    Swing 中 MVC 逻辑的一个问题是代码所在的地方并不总是代码执行的地方。

    石头/剪刀布逻辑将作为控制器的一部分执行。代码更有可能驻留在模型类中,因为在那里可以找到玩家选择石头、纸或剪刀的值。

    将我的 GamePanel 与来自模型的游戏数据关联起来的“正确”方式是什么?

    您将拥有每个活动游戏的游戏数据实例。您可以将它们存储在列表中,因为游戏的顺序很重要。您的列表将在另一个模型类中定义,例如 AllGames。会有一个 AllGames 实例,它会被传递给您的 Swing 类,以供他们用来检索游戏值。

    查看这篇文章Dice Game,了解如何在更复杂的游戏中使用 MVC 架构。

    【讨论】:

    • 视图不应该永远不会引用模型吗? (参考你对第二个问题的回答)——或者这更多地取决于你问的是谁?
    • @Phiction:除非视图从模型中获取值,否则视图将如何显示值?视图不应设置或修改模型中的值。这就是控制器的工作。
    • 我对它的理解一直是控制器更新数据然后告诉视图改变什么而不实际从模型中传递对象(不从模型中导入任何东西)
    猜你喜欢
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    相关资源
    最近更新 更多