Java 这是一种将MVC用于多视图的好方法吗?
我正在使用MVC组织一个数学游戏应用程序,该应用程序包含以下多个类:Java 这是一种将MVC用于多视图的好方法吗?,java,swing,design-patterns,model-view-controller,Java,Swing,Design Patterns,Model View Controller,我正在使用MVC组织一个数学游戏应用程序,该应用程序包含以下多个类: MathsGame.java:主类。当前持有CardLayout,其中包含屏幕类,并与其他类似控制器的操作一起运行应用程序 DiffScreen.java:实现组件并包含在难度选择屏幕上使用的方法。从MigJPanel扩展而来,本质上是模型/视图的混合 GameScreen.java:实现组件并包含在游戏屏幕上使用的方法。从MigJPanel扩展而来,本质上是模型/视图的混合 EndGameScreen.java:实现组件并
:主类。当前持有CardLayout,其中包含屏幕类,并与其他类似控制器的操作一起运行应用程序MathsGame.java
:实现组件并包含在难度选择屏幕上使用的方法。从MigJPanel扩展而来,本质上是模型/视图的混合DiffScreen.java
:实现组件并包含在游戏屏幕上使用的方法。从MigJPanel扩展而来,本质上是模型/视图的混合GameScreen.java
:实现组件并包含在游戏结束屏幕上使用的方法。从MigJPanel扩展而来,本质上是模型/视图的混合EndGameScreen.java
:扩展MigJPanel.java
,将布局设置为JPanel
,并添加无光边框MigLayout
:由ScreenInterface.java
、DiffScreen
和GameScreen
实现,包含EndGameScreen
变量和final
enum
DiffScreen
、GameScreen
和EndGameScreen
拆分为每个类的模型和视图类?另外,创建一个控制器类更好吗?或者正如我所看到的那样,不要麻烦,而是将它与我的主MathsGame
类结合起来?在前面的一个问题中,有人建议我使用一种方法来实现一个控制器接口,这种方法似乎也很有用,但我不确定这是否适用于我的新代码MathsGame
保留在主包中是否有帮助/需要
:作为一个主类,或者可能是我的控制器。也可能实现上面链接的答案中建议的控制器接口MathsGame.java
- 这3个可能在它们自己的子包中,比如说
GamePackage.Views
DiffView.java
GameView.java
EndGameView.java
- 这3个可能在它们自己的子包中,比如说
GamePackage.Model
DiffModel.java
GameModel.java
EndGameModel.java
:如果MathsGame是我的主类和控制器类,则不需要它。如果需要,可以在其自己的子包Controller.java
中GamePackage.Controller
MigJPanel.java
ScreenInterface.java
- 我已经查看了模型视图演示器。它看起来很相似,更适合整个应用程序。这些问题似乎也适用于此。如果这更适合我想做的,我也会同意的
谢谢,我的回答基于这样的假设:您的用户界面(
GameView
,EndGameView
)包含Swing组件,如JTextPane
,JTextField
,JTable
等
您需要单独的型号吗?
Swing组件有自己的模型。例如,a有a,a将有自己的
所以我想说,拥有自己的模型并与UI更改同步并不是处理事情的最佳方式。例如,如果您在JList
中有一个数字列表,并且在GameView
中有JTextField
中的和,那么拥有一个GameViewModel
中有int-sum
和JTextField
的游戏视图模型将重复这些内容,因为JList
和已经有了自己的模型
但是,如果您要将这些数据保存到某个持久性存储(可能是数据库)中,并将数据取回以显示在用户界面上,那么拥有一个GameData
对象,该对象具有int sum
和列表编号
,将非常有用。但是,将该对象与UI中发生的更改同步仍然是不合适的。仅当用户保存数据时(单击“保存”按钮),才应填充此对象
您需要单独的控制器吗?