gpt4 book ai didi

java - 这是将 MVC 用于多个 View 的好方法吗?

转载 作者:行者123 更新时间:2023-11-30 03:37:10 28 4
gpt4 key购买 nike

我正在使用 MVC 组织一个数学游戏应用程序,该应用程序具有以下多个类:

  • MathsGame.java : 主要类(class)。目前持有 CardLayout ,其中包含屏幕类,并与其他类似 Controller 的操作一起运行应用程序。
  • DiffScreen.java :实现组件并包含在难度选择屏幕上使用的方法。扩展自 MigJPanel并且本质上是模型/ View 的混合。
  • GameScreen.java :实现组件并包含在游戏屏幕上使用的方法。扩展自 MigJPanel并且本质上是模型/ View 的混合。
  • EndGameScreen.java :实现组件并包含在游戏结束屏幕上使用的方法。扩展自 MigJPanel并且本质上是模型/ View 的混合。
  • MigJPanel.java : 扩展 JPanel并将布局设置为 MigLayout并添加一个哑光边框。
  • ScreenInterface.java : 由 DiffScreen 实现, GameScreen , 和 EndGameScreen并包含 final变量和 enum .

  • 我看过一些关于 MVC 的教程和阅读,但是我在上面找到的很多资源都涉及非常基本的程序;具有一个模型、一个 View 、一个 Controller 和一个主类。

    我知道我必须如何重构我的程序以使用 MVC,但我不确定有几件事。
  • 我是否正确地说,我应该从上面的哪些类中拆分 DiffScreen , GameScreen , 和 EndGameScreen每个模型和 View 类?此外,创建一个 Controller 类会更好吗,或者——正如我所看到的那样——不要打扰它,而是将它与我​​的 Main MathsGame 结合起来。类(class)?我在上一个问题 here 中建议使用的方法由此我可以实现一个 Controller 接口(interface)似乎也很有用,但我不确定它是否/如何与我的新代码一起工作。
  • 将模型、 View 和 Controller 类拆分为它们自己的子包并保留 MathsGame 对这么小的项目有帮助/需要吗?在主包中?

  • 进一步说明:

    我基本上想知道拥有这些类是否是 MVC 的一个很好的实现:
  • MathsGame.java : 作为一个主类,或者可能是我的 Controller 。也可以按照上面链接的答案中的建议实现 Controller 接口(interface)。
  • 这 3 个可能在它们自己的子包中,比如说 GamePackage.Views
  • DiffView.java
  • GameView.java
  • EndGameView.java
  • 这 3 个可能在它们自己的子包中,比如说 GamePackage.Model
  • DiffModel.java
  • GameModel.java
  • EndGameModel.java
  • Controller.java :如果 MathsGame 既是我的主类又是 Controller 类,则不需要。可以在它自己的子包中GamePackage.Controller如果需要的话。
  • MigJPanel.java
  • ScreenInterface.java

  • 补充:
  • 我查看了 Model-View-Presenter。它看起来很相似,更适合整个应用程序。这些问题似乎也适用于此。如果这更适合我想做的事情,我也可以接受。

  • 我希望我已经很好地解释了自己。这是一个大学项目,但我去年因为生病错过了很多,所以我对这些方面有点困惑。如果我可以更好地澄清任何部分,请发表评论。在此先感谢您的任何建议!

    最佳答案

    我的回答是基于您的用户界面(GameViewEndGameView)包含 Swing 组件(例如 JTextPane)的假设。 , JTextField , JTable等等..

    你需要一个单独的模型吗?

    Swing 组件有自己的模型。例如 JTable有一个 TableModelJComboBox会有自己的ComboBoxModel .

    所以我想说,拥有与 UI 更改同步的自己的模型并不是处理事情的最佳方式。例如,如果您在 JList 中有一个数字列表。 ,以及 JTextField 中的总和在您的 GameView ,具有 GameViewModelint sumList<Integer> numbers将复制自 JList 以来的内容和 JTextField已经有了自己的模型。

    但是,如果您将此数据保存到某个持久性存储(可能是数据库)并取回数据以显示在用户界面上,那么有 GameData具有 int sum 的对象和 List<Integer> numbers将对此有用。但是将该对象与 UI 中发生的更改同步仍然不合适。仅当用户保存数据(单击保存按钮)时才应填充此对象。

    您需要单独的 Controller 吗?

    Swing 已经有了通过*Listeners 在用户界面组件和它的模型之间进行通信的方法。 (ActionListenerItemListener 等..)。所以我认为除了 Swing 附带的 Listener 之外,您不需要一个单独的类来在用户界面和 UI 之间进行通信。

    您应该将模型/ View 和 Controller 放在不同的包中吗?

    没有为什么?相互通信的类应该在同一个包中。所以如果你有 GameView , GameModelGameController它们应该在同一个包中。 DiffView , DiffModelDiffController应该在同一个包中等等。你不应该把 GameViewDiffView在同一个包中,因为它们既是 View ,又是另一个包中的所有模型等...如果这样做,您将不得不公开大多数方法以便 GameModelGameView进行交流,而如果您将它们放在同一个包中,则可以给它们default使用权。为什么这很有用?因为你的类的用户(将来会做出改变的人)会知道哪些方法是在包外使用的,哪些方法不是。

    关于java - 这是将 MVC 用于多个 View 的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27570571/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com