使用Swing理解Java MVC

使用Swing理解Java MVC,java,swing,model-view-controller,Java,Swing,Model View Controller,我了解MVC应用程序的基础知识,但是带有Swing的Java桌面MVC应用程序确实让我头疼。我主要做网络MVC,所以有些交叉就是没有意义。我了解一个非常简单的布局(例如)的基本实现,但将其向外扩展,包括游戏板或其他swing元素,我开始因为对象的范围而感到困惑 假设我正在制作一个应用程序,它应该有一个9x9网格布局(现在我们只说它们是“Tiles”,应该有一个可以显示的值)。放置在这些平铺中的数字来自另一个Swing组件(如排序队列),然后游戏板本身有一些信息,如分数、时间、移动等,以及一些按钮

我了解MVC应用程序的基础知识,但是带有Swing的Java桌面MVC应用程序确实让我头疼。我主要做网络MVC,所以有些交叉就是没有意义。我了解一个非常简单的布局(例如)的基本实现,但将其向外扩展,包括游戏板或其他swing元素,我开始因为对象的范围而感到困惑

假设我正在制作一个应用程序,它应该有一个9x9网格布局(现在我们只说它们是“Tiles”,应该有一个可以显示的值)。放置在这些平铺中的数字来自另一个Swing组件(如排序队列),然后游戏板本身有一些信息,如分数、时间、移动等,以及一些按钮

这里所有的MVC组件是如何组合在一起的?游戏板本身是如何使用MVC的?它是否只有一个TileControl对象,而TileControl有一个TileView,其中包含一个TileModel对象的2D数组(然后对队列等其他对象重复此操作)?然后,如何使TileControl让TileView(它将有一个TileModels的2D数组)和TileModel一起工作,或者控制器此时是否应该有一个对模型的引用


这些问题只是不断地分支,如果每次我试图重写我的UML,我会对所有这些更加困惑,因为在核心部分,它非常简单,但在一个游戏中实现多个视图和控制器似乎非常复杂。

Swing是“基于”MVC范式的,尽管它的实现更多地遵循了M-VC的路线,视图所在的位置是它自己的控制器,至少在您不使用外观代理时是这样。这个问题没有“正确”的答案,您要做的是充分考虑代码的解耦,以便在不影响其他部分的情况下轻松替换任何一个部分。您可以将一个视图用作其他视图的控制器,因此在游戏板中,它可以作为标题的控制器。同样地,你也可以有复合/代理模型,它以父模型为基础,这就是我所想的。任何地方都有好的“Java MVC最佳实践”文档吗?如果有,那将是一场噩梦:P-因为服务器端MVC将不同于客户端MVC,当您需要将两者混合时,您将有另一个MVC来管理它:P。当涉及到以MVC方式管理Swing时,我更关注功能,而不是实现。也就是说,我关注的是视图和模型的意图,而不是它们的实际实现方式,这使得它非常灵活,并且在一定程度上与Swing API断开了连接,我的控制器不关心动作是如何触发的,只是视图可以触发它MVC和Swing的主题很大,没有“正确”的答案,这使得你的问题在它的上下文中相当广泛。考虑到这一点,您可以看看和,它们试图使用围绕MVC(Swing)的MVC来回答特定的需求