在使用MVC范例时,我应该如何连接对象?

这一直困扰着我过去一周,因为我正在尝试制作我的第一场真正的比赛。 这仅仅是我第二年学习Java,所以我真的想学习如何像专业组织一样编程,以及class级如何互动和什么。

我发现MVC一般是专业程序的模式(虽然有不同的方法)。 我一直试图在这种模式下编码,并被连接混淆。 我不明白如何连接它们,但我理解这个概念。

例如,在我的游戏中,我有一个包含所有卡的逻辑的Card类,但是我也有一个CardDisplay类,它包含了油漆覆盖,并扩展了显示卡片和听众图像的JComponent。 我应该把它们合并在一起,还是假设它们是分开的?

另外我如何将视图连接到控制器,例如包含JFrame和更新方法+ GUI元素的View类。 我是否在Game类中创建View的实例variables? 在Main方法中创建variables?

基本上,我只是试图通过学习“实际语言”和更多的专业程序背后的技术和结构来进步。 如果有帮助的话,我一直在看Notch的Minicraft(不是Minecraft!)源代码的结构吗?

像所有的范例一样,MVC是一个工具。 它有它的用途和它的问题。 高素质的专业工程师不是教条式地采用MVC,而是从他/她所需要的东西中剔除剩下的东西。 重点应放在构建可读,可维护的软件上,而不是遵循MVC。

我有一个卡类,其中包含所有卡的逻辑,但我也有一个CardDisplay类包含油漆覆盖,并扩展JComponent显示卡和听众的图像。 我应该把它们合并在一起,还是假设它们是分开的?

不管你是否试图使用MVC,保持游戏逻辑( Card )和渲染逻辑( CardDisplay )是不同的。 所以我会说这是一个很好的方法。

另外我如何将视图连接到控制器,例如包含JFrame和更新方法+ GUI元素的View类。 我是否在Game类中创建View的实例variables? 在Main方法中创建variables?

控制器对象通常知道(并因此包含对视图和模型对象的引用)以便于它们之间的通信。 控制器通常是任何特定MVC场景的模糊界限,特别是在游戏中,大多数控制来自单一input层,将更新直接提供给游戏逻辑代码。 对于每个逻辑或渲染types,很less实际需要一个不同的控制器types(例如,您不应该真的需要CardController )。

负责将用户input转换为命令的代码位可能存在于游戏循环中的某个位置,这些命令将转换为当前正在运行的一组Card对象的操作。 您的卡片渲染对象可以包含对相应Card对象的引用(或者立即给予渲染),以便它们总是绘制卡片逻辑状态的最新版本。

你可能想要简单地创建一个你的整体视图的实例(它大概拥有你的游戏类中的所有CardDisplay和其他GUI元素等),你可能会在你的Main函数的某处创建一个你的游戏类的实例,入口点。