在 MVC 中,是否允许 View 看到但不能与模型对话?
In MVC is the View allowed to see but not talk to the model?
我一直在阅读 MVC 并尽我所能地遵循它,但有一件事不断出现。
视图可以看到模型对象吗?
我目前的游戏结构如下。
对象(模型)<->场景(控制器)<->精灵(视图)
目前我在做以下事情。
场景创建一个 MapObject(model)。 Scene 然后创建一个 MapSpriteNode(view),但使用 MapObject 对其进行初始化。 MapSpriteNode 需要绘制并使用信息来布局其视图和子视图。现在 MapSpriteNode 可以保留对该 MapObject 的引用,但不允许以任何方式更改 MapObject。这样,当在 MapSpriteNode 上调用更新时,它可以看到 MapObject 上的脏图块索引之类的东西,并且可以更新其相应的 TileNodes。
所以现在发生了这种情况
Sprite 被触摸并通知控制器 --> 控制器向模型报告交互 --> 模型相应更新并标记脏索引
发生更新循环
场景调用更新为 -> MapObject(需要随时间发生的任何其他更新)
场景调用update to -> MapSpriteNode(查看是否有脏索引和更新)
场景调用清理脏到 -> MapObject(脏索引被删除,因为渲染完成)
这还是遵循MVC吗?
"Can the Views see Model Objects?"
是的,只要您不通过视图更改任何内容,视图就可以看到 "inside" 模型。
"Is this still following MVC?"
当然。
在MVC架构中,Model应该独立于Controller和View,而在"passive"实现的情况下(你的情况),View应该在Controller通知后轮询Model获取数据,而不是被模型通知这样做(您可以假设在这种情况下 "passive" 模型甚至不知道控制器和视图存在)。
View 应该在 Controller 通知时从 Model 轮询数据,这发生在 Scene 调用更新到 MapSpriteNode 时,View 也应该通知 Controller 有关事件,例如 Sprite 在被触摸后通知 Controller。
就Controller而言,它应该像Scene调用更新MapSpriteNode一样通知View更新,它应该通知Model更新。
我一直在阅读 MVC 并尽我所能地遵循它,但有一件事不断出现。
视图可以看到模型对象吗?
我目前的游戏结构如下。
对象(模型)<->场景(控制器)<->精灵(视图)
目前我在做以下事情。
场景创建一个 MapObject(model)。 Scene 然后创建一个 MapSpriteNode(view),但使用 MapObject 对其进行初始化。 MapSpriteNode 需要绘制并使用信息来布局其视图和子视图。现在 MapSpriteNode 可以保留对该 MapObject 的引用,但不允许以任何方式更改 MapObject。这样,当在 MapSpriteNode 上调用更新时,它可以看到 MapObject 上的脏图块索引之类的东西,并且可以更新其相应的 TileNodes。
所以现在发生了这种情况
Sprite 被触摸并通知控制器 --> 控制器向模型报告交互 --> 模型相应更新并标记脏索引
发生更新循环
场景调用更新为 -> MapObject(需要随时间发生的任何其他更新) 场景调用update to -> MapSpriteNode(查看是否有脏索引和更新) 场景调用清理脏到 -> MapObject(脏索引被删除,因为渲染完成)
这还是遵循MVC吗?
"Can the Views see Model Objects?"
是的,只要您不通过视图更改任何内容,视图就可以看到 "inside" 模型。
"Is this still following MVC?"
当然。
在MVC架构中,Model应该独立于Controller和View,而在"passive"实现的情况下(你的情况),View应该在Controller通知后轮询Model获取数据,而不是被模型通知这样做(您可以假设在这种情况下 "passive" 模型甚至不知道控制器和视图存在)。
View 应该在 Controller 通知时从 Model 轮询数据,这发生在 Scene 调用更新到 MapSpriteNode 时,View 也应该通知 Controller 有关事件,例如 Sprite 在被触摸后通知 Controller。
就Controller而言,它应该像Scene调用更新MapSpriteNode一样通知View更新,它应该通知Model更新。