【问题标题】:Teacher confused about MVC?老师对MVC感到困惑?
【发布时间】:2013-11-21 08:51:13
【问题描述】:

我的任务是使用 MVC 作为模式在 java 中创建游戏。问题是我读到的关于 MVC 的东西并不是老师告诉我的。

我读到的是模型是信息对象,它们由控制器操作。所以在游戏中,控制器会改变物体的位置并检查是否有任何碰撞等。

我的老师告诉我的是,我应该把平台通用的所有东西都放在模型中,而控制器应该告诉模型给出了哪个输入。这意味着游戏循环将在模型类中,但也有碰撞检查等。所以我从他的故事中得到的是,视图是屏幕,控制器是未输入的处理程序,模型是其余部分。

有人能指出正确的方向吗?

【问题讨论】:

  • MVC 背后的基本思想是将逻辑与表示分离,只要你坚持你的逻辑 [游戏循环、玩家属性、AI] 和表示[生成地图、用户输入

标签: java model-view-controller


【解决方案1】:

对于给定的应用程序,实际上存在多个有效的 MVC 模式实现。 一个应用程序作为 MVC 应用程序的根本特征是开发人员将功能分为三大类模型、视图和控制器。

在大多数情况下,模型包含应用程序当前状态和/或基础数据的抽象。视图包含处理演示的所有内容。控制器通常是视图和模型之间的中等实例,反之亦然:例如如果用户输入修改了数据模型,控制器应该应用这些更改(如果它们无效,则将它们作废);反之亦然,如果模型中存在被定义为向视图输出特定输出的状态,则控制器将强制执行此操作。

然而,这些是模糊的线条。 MVC 设计的适用性通常受到您使用的编程语言的限制。

换句话说,你必须在某种程度上即兴发挥。尽可能多地分离功能,但不要在没有意义的地方过度使用。


一些资源:

  1. IBM
  2. Wikipedia

【讨论】:

    【解决方案2】:

    您正在描述一种 MVP 模式:您不希望您的模型与视图相关,因此您的视图(屏幕)无法直接访问您的模型。大多数情况下,它会产生更简洁的代码,但这取决于您的使用情况:http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter

    在 MVC 中,您可以在视图中访问模型,因此您可以使模型对象与您的视图更紧密地耦合(例如参见数据绑定)(也有一些优势)。

    将大部分逻辑放在模型中而不是控制器中,与 MVC 或 MVP 没有直接关系,而是关于领域驱动设计,这是 OOP 的重要组成部分:http://en.wikipedia.org/wiki/Domain-driven_design

    这是 OOP 的最佳实践,如果您的域对象(模型)可以回答有关它包含的数据的问题,那么它必须包含实现,不要通过贫血域模型(由于函数式编程的炒作):http://www.martinfowler.com/bliki/AnemicDomainModel.html

    【讨论】: